事件分发
来源:互联网 发布:淘宝网会员费 编辑:程序博客网 时间:2024/05/30 23:36
事件分发
onTouchListener()调用onTouch(),
返回false,执行 onTouchEvent(),
返回true,不会执行onTouchEvent(),
onTouchEvent()中执onClick
ViewGroup具有以下方法:
dispatchTouchEvent 分发
onInterceptTouchEvent 拦截
onTouchEvent 消费
View具有以下方法:
dispatchTouchEvent 分发
onTouchEvent 消费
dispatchTouchEvent 分发
返回 super.dispatchTouchEvent(ev) 调用自身的拦截方法
返回false 调用上级的消费方法
返回true 该方法消费
onInterceptTouchEvent 拦截
返回 super.dispatchTouchEvent(ev) 调用下级的分发方法
返回false 调用下级的分发方法
返回true 调用自身的消费方法
onTouchEvent 消费
返回 super.dispatchTouchEvent(ev)
如果是view,clickable为true,本身消费,为false,调用上级的消费方法,如果是viewGroup,调用上级的消费方法
返回false 调用上机的消费方法
返回true 本身消费
解决事件冲突:
viewGroup中onInterceptTouchEvent方法进行是否事件分发给子View处理,根据需求来
ViewGroup如果不想让父布局拦截自己的事件,则可以通过在dispatchTouchEvent的DOWN事件后调用requestDisallowInterceptTouchEvent(true)来告诉父布局不要拦截我的事件
View如果不想让父布局拦截自己的事件,则可以通过在dispatchTouchEvent的DOWN事件后调用getParent().
requestDisallowInterceptTouchEvent(true)来告诉父布局不要拦截我的事件
实例:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
return true;
case MotionEvent.ACTION_UP:
requestDisallowInterceptTouchEvent(false);
break;
default:
break;
}
return super.onInterceptTouchEvent(ev);
}
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- 事件分发
- c++ 项目中的 extern "c" { }
- 基于 Python 和 Scikit-Learn 的机器学习介绍
- js 跨域总结
- 素数距离问题
- android RotateAnimation设置中心点旋转动画
- 事件分发
- 小程序实现选择图片九宫格源码资源
- 进制
- powerBuilder登录
- Python Web框架之Flask(1)
- 进程间通信
- Android图片缓存之Bitmap详解
- Linux基础命令
- 算法导论14.3 -区间树