事件传递机制总结
来源:互联网 发布:js注释方式 编辑:程序博客网 时间:2024/05/17 06:48
事件系统组成元素:
1. 每一个事件被包装为一个MotionEvent
2. 描述一个事件的位置(location)
--ACTION_DOWN
--ACTION_UP
--ACTION_MOVE
--ACTION_POINTER_DOWN
--ACTION_POINTER_UP
--ACTION_CANCEL
3.事件的元数据包括
--事件的位置(location)
--第几个手指(多点触摸事件)
--事件发生的时间
4.触摸事件开始于ACTION_DOWN结束于ACTION_UP
事件传递系统:
(1) 事件从Activity.dispatchTouchEvent()开始传递,只要没有被停止或拦截,从最上层的View(ViewGroup)开始一直往下(子View)传递。子View可以通过onTouchEvent()对事件进行处理。
(2) 事件由父View(ViewGroup)传递给子View,ViewGroup可以通过onInterceptTouchEvent()对事件做拦截,停止其往下传递。
(3) 如果事件从上往下传递过程中一直没有被停止,且最底层子View没有消费事件,事件会反向往上传递,这时父View(ViewGroup)可以进行消费,如果还是没有被消费的话,最后会到Activity的onTouchEvent()函数。
(4) 如果View没有对ACTION_DOWN进行消息,之后的其他事件不会传递过来。
(5) OnTouchListener.onTouch()优先于onTouchEvent()对事件进行消费。
自定义View事件处理注意事项;
1. 处理事件
--@override onTouchEvent()方法
--提供一个OnTouchlistener
2. 消费事件
-- 返回TRUEwith ACTION_DOWN表示消费了该事件
-- 其他事件返回TRUE仅仅是阻止后续action事件传递
3. ViewConfiguration类中一些有关的方法
(ViewConfigurationconfiguration = ViewConfiguration.get(context);获得一个ViewConfiguration对象)
--getScaledTouchSlop() 获得能够进行手势滑动的最短距离.如果小于这个距离就不触发移动控件事件.
--getScaledMinimumFlingVelocity()获得允许执行一个Fling手势动作的最小速度值
--getLongPressTimeout()是用于检测是不是长按的时间,默认为500毫秒
4.调用dispatchTouchEvent()方法避免直接调用onTouchEvent()
5.如果是ViewGroup可以拦截事件
TouchDelegate委派处理View事件
实例:
1.设定一个长方形区域
Rect bounds = newRect(0, 0, getMeasuredWidth(), getMeasuredHeight());
2.设置长方形为点击生效区域,委派处理点击事件的View
TouchDelegatedelegate =new TouchDelegate(bounds, mButton);
setTouchDelegate(delegate);
多指触摸事件处理
--MotionEvent.getPointerCount()得到目前屏幕上的触点数(ACTION_MOVE)
--使用ACTION_POINTER_DOWN和ACTION_POINTER_UP来监听多点触控操作。多点触控有用的方法。这两个事件需要结合MotionEvent.getActionMasked(),MotionEvent.getActionIndex()两个方法来处理.
getActionMasked()表示可以获取用于多点触控检测点的事件。而在1.6和2.1中并没有event.getActionMasked()这个方法,其实他就是把event.getAction()&MotionEvent.ACTION_MASK封装了一下。
getActionIndex().获取多点事件中的索引,即表示是哪一个手指触发的事件
更多介绍见:
http://developer.android.com/reference/android/view/MotionEvent.html
http://stackoverflow.com/questions/13546376/how-to-use-multitouch-properly-purpose-of-motionevent-getactionindex- 事件传递机制总结
- 事件传递机制总结
- touch事件传递机制总结
- onTouchEvent事件传递机制总结
- Android 事件传递机制(简要总结)
- 总结系列-触摸屏事件的传递机制
- View的事件传递机制总结
- Android中事件传递机制的总结
- Android中事件传递机制的总结
- Android中事件传递机制的总结
- Android中事件传递机制的总结
- Android中事件传递机制的总结
- android触摸事件传递机制以及onInterceptTouchEvent()和onTouchEvent()总结
- android事件传递机制以及onInterceptTouchEvent()和onTouchEvent()总结
- android事件传递机制以及onInterceptTouchEvent()和onTouchEvent()总结
- android事件传递机制以及onInterceptTouchEvent()和onTouchEvent()总结
- 有诚意的个人onTouchEvent事件传递机制总结(多图!) ...
- Android事件传递机制之onInterceptTouchEvent()和onTouchEvent()总结
- classpath 和 classpath*的区别
- 基于 Paraview 扩展与实现——(1)
- 追求神乎其技的程式设计之道(四)
- Velocity用户手册---中文版(学习修改版)
- jquery事件
- 事件传递机制总结
- ContentProviders学习笔记
- android 简介与学习资源
- android源码编译错误
- 追求神乎其技的程式设计之道(五)
- java学习笔记(5)
- 2014-05-17:UML扩展包含泛化侧重点,CXXXAPP类设置主窗口,MFC 事件响应函数出现在三个地方,
- VS2010(VC++)使程序一打开提示以管理员身分打开
- java学习笔记(6)