一簡單場景下(如:水平滑動裡面巢狀一層垂直滑動)
解決辦法很多,這裡記乙個方法。通過水平滑動的距離dx與垂直滑動的距離dy的大小來判斷是水平還是垂直滑動。通常有外部攔截跟內部攔截,外部攔截即重寫父容器的onintercepttouchevent,而內部攔截即重寫子元素的dispatchtouchevent,並根據具體情況將邏輯返回給父容器的onintercepttouchevent.因外部攔截法較內部攔截法更為簡單,所以推薦使用外部攔截法解決滑動衝突。
1.measure,layout,draw。measure確定測量的寬高,layout確定view的最終寬高跟四個頂點,draw將view繪製到螢幕。其中view的measure方法是final方法,子類不可重寫,而viewgroup的measure可以重寫。
margin屬性是父容器控制,而padding屬性自定義view自己控制,所以設定前padding屬性需重寫。步驟如下:
在ondraw方法中
int paddingleft=getpaddingleft();
int paddingright=getpaddingright();
int paddingtop=getpaddingtop();
int paddingbottom=getpaddingbottom();
使用前將padding值新增到自定義view中即可。
2.為自定義view新增自定義屬性步驟:
2.1 在values目錄下建立xml檔案 如attrs.xml
2.2
<?xml version="1.0" enco ding="utf-8"?>
2.3在自定義view的構造方法中新增
typedarray array=context.obtainstyledattributes(attrs, r.styleable.circleview);
mcolor=array.getcolor(r.styleable.circleview_circle_color, color.red);
array.recycle();
2.4在xml中應用
Android View之彈性滑動
一 使用scroller 繼承自rlativelayout,通過invalidate 和postinvalidate 兩個方法的靈活運用 public class mainactivity extends relativelayout mscroller.startscroll方法什麼也沒做,只是保...
Android View滑動與自定義
一 view的滑動 1.獲取最小滑動距離 int touchslop viewconfiguration.get context getscaledtouchslop 2.scroller類 滑動控制 1 建立 scroller scroller new scroller context 2 控制滑...
android View的層級結構
我們看到最頂層就是phonewindow decorview,接著decorview下面有乙個linearlayout,linearlayout下面有兩個framelayout 上面那個framelayout是用來顯示標題欄的,這個demo中是乙個textview,當然我們還可以定製我們的標題欄,利...