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

这是一个外层的控件,它是一个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



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容