Android View的 滑動衝突及工作流程

2021-07-10 23:40:55 字數 1141 閱讀 1910

一簡單場景下(如:水平滑動裡面巢狀一層垂直滑動)

解決辦法很多,這裡記乙個方法。通過水平滑動的距離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,當然我們還可以定製我們的標題欄,利...