Android 事件分发机制探析
来源:互联网 发布:mac特殊数学符号怎么打 编辑:程序博客网 时间:2024/05/16 08:23
一基础知识
android的事件处理分为3步。
1)public booleandispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
二事件探析
场景:本想实现ttdt那种滑动页面结束activity的效果,摸索了好久终于实现,流畅效果很满意,但是activity布局上添加其他控件,比如giriView\listView等,会出现等层自己写的那个View获取不到焦点,导致滑动事件失效。
分析:当在顶层View上加其他View,默认情况都是顶层的事件要传给最上面的view处理,导致为处理情况下,我做的效果失效了;
下图为一个正常的View点击效果图:
1、ViewGroup3的dispatchTouchEvent()方法会被调用。
2、ViewGroup3调用ViewGroup2的dispatchTouchEvent()方法。
3、ViewGroup2调用ViewGroup1的dispatchTouchEvent()方法。
4、ViewGroup1会调用View1的dispatchTouchEvent()方法。
5、View1的dispatchTouchEvent()方法调用自己的onTouchEvent()方法。在onTouchEvent方法中处理点击事件。处理完了后会返回一个true给调用它的dispatchTouchEvent()方法。
6、ViewGroup1的dispatchTouchEvent()方法会返回一个true值给ViewGroup2的dispatchTouchEvent()方法。这样一直将则个true值返回到ViewGroup3的dispatchTouchEvent()方法。ViewGroup3在将这个值返回给调用它的方法。这样一个事件分发过程结束。
三问题解决
想到这里,基本上我们就可以利用View的分发拦截机制,将我们需要的Event拦截,不需要的转发。
在自己写的view重写onInterceptTouchEvent()在里面做下操作:
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub switch (ev.getAction()) { case MotionEvent.ACTION_MOVE: mLastDownX = (int) ev.getX(); System.err.println("ACTION_DOWN=" + mLastDownX); return true; } return super.onInterceptTouchEvent(ev); }
四验证效果
运行程序,看效果,完美实现,流畅滑动,可以达到ttdt效果!
3 1
- Android 事件分发机制探析
- Android 事件分发机制探析
- Android的Touch事件分发机制简单探析
- Android源码分析(二):View的事件分发机制探析
- android事件分发机制
- Android事件分发机制
- Android 事件分发机制
- Android事件分发机制
- Android 事件分发机制
- Android 事件分发机制
- android 事件分发机制
- Android事件分发机制
- android 事件分发机制
- android事件分发机制
- Android 事件分发机制
- android事件分发机制
- android 事件分发机制
- android 事件分发机制
- 输入字符串的两种方法
- 关于.公司和.网络域名注册和服务调整的公告
- javaScript_新手正则匹配菜鸟攻略
- Hadoop实战-中高级部分 之 Hadoop MapReduce工作原理
- 关于索引压缩的研究
- Android 事件分发机制探析
- cocos2dx之OpenGl绘图
- Android OpenGL ES 2.0坐标系设定与顶点转换
- socket编程之select()
- 资源文件冲突error RC2151 : cannot reuse string constants, 61446(0xF006) - "****" already defined. Cannot a
- hibernate:映射文件的属性名必须和pojo类的属性名以及数据库字段名一一对应
- android 多控件顺序翻转动画设计实现
- CAD环境中批量求算DWG面积
- 暗访黄牛:“抢票软件”如何几分钟抢一车票的