国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android滑動事件沖突詳解(一)

2020-01-02 07:01:47
字體:
來源:轉載
供稿:網友

首先,我們假設這樣一個場景:一個ViewPager里面嵌套一個ViewPager,內部滑動方向和外部滑動方向一樣時,該怎么解決這一沖突呢?
針對滑動沖突這里給出兩種解決方案:外部攔截法,內部攔截法。

外部攔截法
外部攔截法是指點擊事件都先經過父容器的攔截處理,如果父容器需要此攔截事件,就攔截,不需要就不攔截,這種方法比較符合點擊事件的分發機制。這種方法代碼如下:

@Override  public boolean onInterceptTouchEvent(MotionEvent ev) {    ...    boolean intercepted=false;    switch (action) {      case MotionEvent.ACTION_MOVE:        intercepted=false;        break;      case MotionEvent.ACTION_MOVE:        if(父容器需要處理此事件)          intercepted=true;        else          intercepted=false;        break;      case MotionEvent.ACTION_UP: {        intercepted=false;        break;    }    ...    return intercepted;  }

上述代碼是外部攔截的典型邏輯,只需要重寫onInterceptTouchEvent()方法,修改父容器當前需要的事件即可。 

內部攔截法
內部攔截法是指:父容器不攔截任何事件,所有事件都傳遞給子元素,如果子元素需要此事件就直接消耗掉,否則就交由父容器處理。這種方法與Android中的事件分發機制不一致,需要配合 requestDisallowInterceptTouchEvent()方法才能正常工作。我們需要重寫子元素的,代碼如下:

public boolean dispatchTouchEvent(MotionEvent event) {    ...    switch (action) {      case MotionEvent.ACTION_MOVE:            getParent().requestDisallowInterceptTouchEvent(true);        break;      case MotionEvent.ACTION_MOVE:        if(子元素需要處理此事件)              getParent().requestDisallowInterceptTouchEvent(true);        break;      case MotionEvent.ACTION_UP: {        break;    }    ...    return super.dispatchTouchEvent(event);;  }

當然,還需要修改父容器的onInterceptTouchEvent()方法,代碼如下:

@Override  public boolean onInterceptTouchEvent(MotionEvent ev) {      int action=ev.getAction();      if(action==MotionEvent.ACTION_DOWN){        return false;      }else {        return true;      }    }

以上就是兩種解決滑動沖突的解決方案,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 澄迈县| 贵港市| 乌审旗| 博乐市| 搜索| 名山县| 时尚| 古交市| 河曲县| 青浦区| 鄂托克前旗| 米泉市| 余姚市| 闻喜县| 日土县| 金川县| 西吉县| 湖北省| 鄂尔多斯市| 富源县| 尉氏县| 安阳县| 西丰县| 霍城县| 克什克腾旗| 闸北区| 金堂县| 肃南| 无锡市| 通化市| 湘阴县| 南郑县| 湖南省| 七台河市| 新津县| 紫阳县| 大丰市| 隆子县| 伊宁市| 临沧市| 庄河市|