这是一个外层的控件,它是一个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,则代表事件被消费,就不会再传递。
下附图给予参考,触摸传递:
子ViewPager 父ViewPager
网友评论