[Android开发]使用ViewPagerIndicator开源库处理其中事件分发机制
2015-11-04 10:27
861 查看
首先我先说一下我的UI框架,主界面是RadioGroup+ViewPager,另外还有一个侧滑是Fragment+ViewPager,然后我又在侧滑菜单的ViewPager上加了一个开源库ViewPagerIndicator,但是我发现ViewPagerIndicator上的Tab是不可以滑动的,我一想应该就是事件分发机制,所以我在ViewPagerIndicator的源码TabPageIndicator中重写了dispatchTouchEvent方法:
/** * 事件分发, 请求父控件及祖宗控件不要拦截事件 */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { getParent().requestDisallowInterceptTouchEvent(true);// 用getParent去请求 return super.dispatchTouchEvent(ev); }
这样ViewPagerIndicator上的Tab就可以滑动了,顺便在网上查里一些资料,介绍一下AndroidTouch事件传递机制:
android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法:
1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
我们可以看一下ACTION_DOWN事件处理流程:
说明:
首先触摸事件发生时(ACTION_DOWN),由系统调用Activity的dispatchTouchEvent方法,分发该事件。根据触摸事件的坐标,将此事件传递给out的dispatchTouchEvent处理,out则调用onInterceptTouchEvent 判断事件是由自己处理,还是继续分发给子View。此处由于out不处理Touch事件,故根据事件发生坐标,将事件传递给out的直接子View(即middle)。
Middle及Center中事件处理过程同上。但是由于Center组件是clickable 表示其能处理Touch事件,故center中的onInterceptTouchEvent方法将事件传递给center自己的onTouchEvent方法处理。至此,此Touch事件已被处理,不继续进行传递。
参考网站:/article/5050759.html
相关文章推荐
- ImageView中XML属性src和background区别
- Android 通知栏Notification的整合全面学习
- Android关机代码
- phonegap/cordova项目发布android apk
- Android 百分比布局库(percent-support-lib) 解析与扩展
- Android 修改默认的ProgressBar的动画效果
- 浅谈BroadCastReceiver两种注册方式以及其区别
- android模拟器与PC的端口映射
- Android Studio配置SVN
- Android反编译工具
- Android优秀开发资源
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- Android ListActivity使用
- No Android SDK found. Please configure an Android SDK.
- Android 编程下 App Install Location
- android-studio(1):配置NDK开发环境
- Android/ContentProvider使用<转载>
- android broadcast
- android手机如何获取手机号
- Android带文字的ImageButton实现