欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2020年04月08日 16:38:15   作者:Vonnie_Jade  
這篇文章主要為大家詳細介紹了Android滑動事件沖突,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

首先,我們假設(shè)這樣一個場景:一個ViewPager里面嵌套一個ViewPager,內(nèi)部滑動方向和外部滑動方向一樣時,該怎么解決這一沖突呢?

針對滑動沖突這里給出兩種解決方案:外部攔截法,內(nèi)部攔截法。

外部攔截法

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

@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()方法,修改父容器當前需要的事件即可。 

內(nèi)部攔截法

內(nèi)部攔截法是指:父容器不攔截任何事件,所有事件都傳遞給子元素,如果子元素需要此事件就直接消耗掉,否則就交由父容器處理。這種方法與Android中的事件分發(fā)機制不一致,需要配合 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;
   }
  }

更多關(guān)于滑動功能的文章,請點擊專題: 《Android滑動功能》

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論