1. 程式人生 > >ViewPager 常見滑動衝突解決方法

ViewPager 常見滑動衝突解決方法

情況1:ViewPager中的第一個child View 中的子元素要求可以水平滑動. 在實際中遇到的問題是ViewPager中的第一個child View 中的子元素一件拿到了Touch(action=move)的事件,但是滑動的時候距離總是小於ViewConfiguration.get(context).getScaledPagingTouchSlop() ,考慮到ViewPager 本身也可以水平滑動,只是我第一個View 裡面右滑的時候ViewPager沒有在視覺上面給體現出來,解決方法如下: 增加或者參考如下程式碼.
  1. privatevoid requestParentDisallowInterceptTouchEvent
    (boolean disallowIntercept){
  2. finalViewParent parent = getParent();
  3. if(parent !=null){
  4. parent.requestDisallowInterceptTouchEvent(disallowIntercept);
  5. }
  6. }
  7. @Override
  8. publicboolean dispatchTouchEvent(MotionEvent ev){
  9. requestParentDisallowInterceptTouchEvent(true);
  10. returnsuper.dispatchTouchEvent(ev);
  11. }
因為ViewPager中的第一個child View已經執行了onInterceptTouchEvent()和onTouchEvent(),但是log 列印的滑動距離確小於實際滑動的距離,所以應該是ViewPager 也處理了滑動事件只是沒有消耗掉這些事件,我們要做的就是不讓他處理這些事件就好了.