Android基础知识

Android-解决事件冲突和处理滑动事件

2017-09-19  本文已影响55人  ZebraWei
1.解决事件冲突的主要思路
2.主要方法:外部拦截法和内部拦截法

案例二:

public class HorizontalScrollViewPager extends ViewPager{

public HorizontalScrollViewPager(Context context) {
    super(context);
}

public HorizontalScrollViewPager(Context context, AttributeSet attrs) {
    super(context,attrs);
}

private float startX;
private float startY;
/**
 * 事件分发
 */
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
   // getParent().requestDisallowInterceptTouchEvent(true); //把事件传递给自己
    switch(ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            //一定要把事件给自己
            getParent().requestDisallowInterceptTouchEvent(true);
            //1.记录起始坐标
            startX = ev.getX();
            startY = ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            //1.来到新的坐标
            float endX = ev.getX();
            float endY = ev.getY(); ev.getRawX();
            //2.计算偏移量
            float distanceX = endX - startX;
            float distanceY = endY - startY;
            //3.判断滑动方向
            if(Math.abs(distanceX) > Math.abs(distanceY)) {
                //水平方向滑动
                //1.如果第0个位置,并且滑动方向是从左到右滑动
                //getParent().requestDisallowInterceptTouchEvent(false);
                if(getCurrentItem() == 0 && distanceX >0 ) {
                    getParent().requestDisallowInterceptTouchEvent(false);
                }
               // 2.如果是页签页面的最后一个位置,并且滑动方向是从右向左滑动
                //getParent().requestDisallowInterceptTouchEvent(false);
                else if (getCurrentItem() == (getAdapter().getCount()-1) && distanceX <0) {
                    getParent().requestDisallowInterceptTouchEvent(false);
                }
               // 3.其他中间部分
               // getParent().requestDisallowInterceptTouchEvent(true);*/
                else {
                    getParent().requestDisallowInterceptTouchEvent(true);
                }
            } else {
                //竖值方向滑动
                getParent().requestDisallowInterceptTouchEvent(false);
            }
            break;
        case MotionEvent.ACTION_UP:
            break;
    }
    return super.dispatchTouchEvent(ev);
  }
}
上一篇 下一篇

猜你喜欢

热点阅读