内容简介:处理触摸事件 -Subclass重写onTouchEvent() - 提供OnTouchListener •消费事件子类重写在
- 触摸系统概述
- 触摸事件框架
- 处理自定义触摸事件
- 系统提供的触摸机制
- 系统提供的手势机制
如何处理 Andriod 触摸事件
-
每个用户的触摸事件都被包装为动作事件
-
描述用户当前的操作
ACTION_DOWN ACTION_UP ACTION_MOVE ACTION_POINTER_DOWN ACTION_POINTER_UP ACTION_CANCEL
-
包括原数据的事件
- 触摸位置
- 触控点的数量(手指)
- 事件发生的时间
-
一个”手势”从
ACTION_DOWN
开始到ACTION_UP
结束 -
事件是从
Activity
的dispatchTouchEvent()
开始,通过视图从上而下的形式传递,父视图(ViewGroups
)将事件分发给子视图,事件在传递的过程是可以随时拦截的。它会沿着关系链向下传递直到该事件被消费掉。任何未拦截的事件都会传递到Activity
的onTouchEvent()
后结束。 -
Activity.dispatchTouchEvent()
,总是被首先调用,然后将事件发送到附加的Window
根视图中,onTouchEvent()
,如果没有视图消耗事件是调用,总是持续的调用状态中。 -
View.dispatchTouchEvent()
,如果存在,则首先将事件发送给侦听器View.OnTouchListener.onTouch()
,如果没有消耗则处理事件本身,View.onTouchEvent()
。 -
ViewGroup.dispatchTouchEvent()
中的onInterceptTouchEvent()
,会检查它是否应该取代子视图。而对于每个子视图,如果事件是相关的(内部视图)则以相反的顺序添加它们。如果child.dispatchTouchEvent()
以前没有处理则继续传递到下一个视图,直到该事件被消耗(与View相同)。事件拦截(onInterceptTouchEvent()
返回true
)会将ACTION_CANCEL
传递给子 Activity,所有即将的事件都由ViewGroup直接处理。子视图可以调用requestDisallowTouchIntercept()
来阻止onInterceptTouchEvent()
继续持有当前手势的时间。 每个新手势(ACTION_DOWN
)都会重置fragmework
的标识。
错误的视图案例
有趣的视图案例
处理自定义事件
处理触摸事件 -Subclass重写onTouchEvent() - 提供OnTouchListener •消费事件
- 使用ACTION_DOWN返回true以显示兴趣 •即使您对ACTION_DOWN不感兴趣,也请返回true
- 对于其他事件,返回true只会停止进一步处理 •ViewConfiguraCon -getScaledTouchSlop()中可用的有用常量 •距离移动事件可能会在被视为拖动之前发生变化-getScaledMinimumFlingVelocity() •系统认为拖动为速度的速度-getScaledPagingTouchSlop() •触摸用于水平分页手势的slop(即ViewPager) - 为每个设备的密度缩放显示的值
处理事件
子类重写 onTouchEvent()
方法,并提供一个 OnTouchListener
。使用 ACTION_DOWN
并返回 true
表示消耗该事件即使您对 ACTION_DOWN
不大算消耗该事件也请返回 true
,对于其他事件,返回 true
会停止事件的进一步处理。
在 ViewConfiguration
中有用的常量:
getScaledTouchSlop() getScaledMinimumFlingVelocity() getScaledPagingTouchSlop()
以上内容是 Mastering the Android Touch System PPT 1-10页的内容总结,文章有些术语及方法释明需要调整校对。剩下的10页会陆续补上。如果有翻译不妥的地方,欢迎大家提出,一起完善。
以上所述就是小编给大家介绍的《【译】系统的学习 Android Touch》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。