解决screview与子view滑动冲突

在android开发过过程中,经常会用到ScrollView,在布局中ScorellView会放许多子View。

我们都知道ScrollView是可以滑动的,而有时放的一些子View也是可以滑动的,比如:ListView、ViewFlow...,这样就很容易造成滑动事件的冲突,

本文是在ScrollView中放了ViewFlow的情况下。

用一个类去继承ScrollView,并重写ScrollView的onInterceptTouchEvent事件

 1 public class ScrollViewExtend extends ScrollView {
 2 
 3     private float xDistance, yDistance, xLast, yLast;
 4 
 5     public ScrollViewExtend(Context context, AttributeSet attrs) {
 6         super(context, attrs);
 7     }
 8 
 9     @Override
10     public boolean onInterceptTouchEvent(MotionEvent ev) {
11 
12         // 通过滑动的幅度大小来判断是上下滑动还是左右滑动
13         switch (ev.getAction()) {
14         case MotionEvent.ACTION_DOWN:
15             xDistance = yDistance = 0f;
16             xLast = ev.getX();
17             yLast = ev.getY();
18             break;
19         case MotionEvent.ACTION_MOVE:
20             final float curX = ev.getX();
21             final float curY = ev.getY();
22 
23             xDistance += Math.abs(curX - xLast);
24             yDistance += Math.abs(curY - yLast);
25             xLast = curX;
26             yLast = curY;
27             if (xDistance > yDistance) {
28                 return false;
29             }
30         }
31 
32         return super.onInterceptTouchEvent(ev);
33     }
34 
35 }

 

posted on 2015-11-04 14:10  幌才  阅读(298)  评论(0编辑  收藏  举报