requestDisallowInterceptTouchEvent
2016-07-13 19:26
399 查看
ViewPager来实现左右滑动切换tab,如果tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比如想滑动tab项中的可水平滑动的控件,却导致tab切换。
因为Android事件机制是从父View传向子View的,可以去检测你当前子View是不是在有可滑动控件等,决定事件是否拦截,但是这个麻烦,而且并不能解决所有的问题(必须检测触摸点是否在这个控件上面),其实有比较简单的方法,在你嵌套的控件中注入ViewPager实例(调用控件的getParent()方法),然后在onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent里面告诉父View,也就是ViewPager不要拦截该控件上的触摸事件。
代码一般如下:
1 public boolean onTouch(View v, MotionEvent event) {
2 switch (event.getAction()) {
3 case MotionEvent.ACTION_MOVE:
4 pager.requestDisallowInterceptTouchEvent(true); //表示父控件不要拦截子控件pager是父控件
5 break;
6 case MotionEvent.ACTION_UP:
7 case MotionEvent.ACTION_CANCEL:
8 pager.requestDisallowInterceptTouchEvent(false);
9 break;
10 }
11 }
当用户move的时候,我们告诉父组件,不要拦截我的事件(这个时候子组件是可以正常响应事件的),拿起之后就会告诉父组件可以阻止。
相关文章推荐
- UESTC 2016 Summer Training #3 Div.2(未完待续)
- UE4学习笔记(六): 次世代的移动平台渲染技术
- IOS-usr/include-dispatch-queue.h
- IOS-Frameworks-UIKit-UIView.h
- iOS中 UITableViewCell cell划线那些事 韩俊强的博客
- iOS中 UITableViewCell cell划线那些事 韩俊强的博客
- IOS-Frameworks-UIKit-UIViewController
- openstack安装keystone过程中提示requires:PyYAML的解决方案
- IOS-Frameworks-UIKit-UIColor.h
- IOS-Frameworks-UIKit-UINavigationController.h
- Codeforces 566F Clique in the Divisibility Graph
- 修改UINavigationController、UITabBarController、UITabBar、UIToolBar颜色
- 为什么mysql 连接url中useUnicode=true&characterEncoding=UTF-8?
- UE4学习笔记(五): 基于物理光照的材质
- UE4学习笔记(四): 开发体验
- 消息队列(Message Queue)简介及其使用
- 实现UITextView的placeholder
- UE4学习笔记(二): IOS游戏部署
- UE4学习笔记(一): 基本概念
- UE4 iOS打包