博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
事件传递机制总结
阅读量:4630 次
发布时间:2019-06-09

本文共 1839 字,大约阅读时间需要 6 分钟。

事件系统组成元素:

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.62.1中并没有event.getActionMasked()这种方法,事实上他就是把event.getAction()&MotionEvent.ACTION_MASK封装了一下。

getActionIndex().获取多点事件中的索引,即表示是哪一个手指触发的事件

很多其它介绍见:

转载于:https://www.cnblogs.com/zfyouxi/p/3828404.html

你可能感兴趣的文章
delphi 一个时钟引发的事情
查看>>
JPEG和Variant的转换
查看>>
How to read very large text files fast
查看>>
Java读取.properties配置文件
查看>>
java绘制带姓的圆
查看>>
android数据的4种存储方式
查看>>
css缓存问题
查看>>
3dmax_FBX转havok_model
查看>>
Linux常用命令
查看>>
实验三 二叉树
查看>>
几种交叉验证(cross validation)方式的比较
查看>>
第44章:MongoDB-集群--Sharding(分片)--分片的片键选择
查看>>
自定义ISO结构
查看>>
7.11 animals.c 程序
查看>>
java Web三大组件--过滤器
查看>>
使用NUnit为游戏项目编写高质量单元测试的思考
查看>>
Uva 1638 Pole Arrangement
查看>>
Java内存泄漏
查看>>
逻辑函数的代数化简法
查看>>
第十一周PSP&进度条
查看>>