安卓控件触摸滑动事件冲突简介

这是一个外层的控件,它是一个viewPager,在它的里面有个listView,listView每一个item被点击会弹出内容,这里要讲解的是ViewPager子View滑动事件冲突的解决,安卓系统提供给我们关于触摸传递事件有三个方法:

它们分别是:

1、public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent

2、public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent

3、public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent

当条目被点击,首先Activity将TouchEvent事件通过dispatchTouchEvent方法传递给ViewGroup,

ViewGroup通过dispatchTouchEvent方法传递给interceptTouchEvent,这个时候,如果返回true ,则交给这个ViewGroup的onTouchEvent处理;如果返回false,则交给子View的dispatchTouchEvent方法处理。

当事件传递到子view 的dispatchTouchEvent方法中时,通过方法传递到当前View的onTouchEvent方法中,这个时候如果返回true,那么这个事件就会止于该view;如果返回 false ,那么这个事件会从这个子view 往上传递,而且都是传递到父View的onTouchEvent 来接收。

当传递到ViewGroup的 onTouchEvent 最后也返回 false 的话,它将继续传递到Activity的onTouchEvent中,还是返回false的话,这个事件就会“消失“;事件向上传到中间的任何onTouchEvent方法中,如果返回true,则代表事件被消费,就不会再传递。

下附图给予参考,触摸传递:

安卓控件触摸滑动事件冲突简介_第1张图片
子ViewPager


安卓控件触摸滑动事件冲突简介_第2张图片
父ViewPager



你可能感兴趣的:(安卓控件触摸滑动事件冲突简介)