再论Android中的OnTouch事件和MotionEvent

本文详细介绍了Android中OnTouch事件与MotionEvent的工作机制,包括ACTION_DOWN、ACTION_MOVE、ACTION_UP和ACTION_CANCEL等事件类型,以及ViewGroup的OnInterceptTouchEvent在事件分发中的作用。重点讲解了事件的传递顺序、如何拦截和消耗事件,以及在ListView等场景下的应用示例。
摘要由CSDN通过智能技术生成

昨天写程序的时候,碰到一个很棘手的问题,牵扯到OnTouch事件和MotionEvent事件,网上虽然有一些说明,但是对于我想要知道的不是很完整,比较零散,这里就总结一下android中的Ontouch机制。


要理解OnTouch机制,首先得明白有哪些OnTouch事件,常用的有这么四种:


ACTION_DOWN  

这个是OnTouchEvent事件的开始,任何事件都必须手指按下去才行。这个事件是一个从触摸屏无触摸状态到有触摸状态的转换。


ACTION_MOVE  

紧接着的Move事件,可能有人会以为手指移动就会调用这个MOVE,但是经我测试并非如此,这个事件,只要手指在屏幕上,即使不动也会调用。


ACTION_UP  

触摸事件的结束,正常情况下,手指离开屏幕;触摸屏从有触摸状态到无触摸状态的转换。


ACTION_CANCEL  

这个不是独特的触摸事件,而是由系统来判定的,一般认为你的手指从屏幕上你要点击的区域移出来,就cancel掉了。很简单的例子,你点击一个按钮,点击的时候,按钮变颜色,只要你的手指不拿开,按钮不会变回原来的颜色。这时候你手指拿开了,按钮颜色变回去,你就触发了ACTION_UP的事件;或者你的手指移出按钮区域了,按钮颜色也变回去,这时候你触发了ACTION_CANCEL事件,你点击按钮的方法也不会被触发。


我们知道,android中的View是按照一个View Hierarchy来组织的。而且,在设定onTouch事件的时候,触摸的顺序也是走的这个View Hierarchy从上往下传递,叫做dispatch。


ViewGroup里面有一个方法决定了这个ViewGroup的dispatch方式:


OnInterceptTouchEvent(MotionEvent ev)


这个方法由系统自己调用,但是在写自己的ViewGroup的时候,可以复写,工作过程和返回值说明如下:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值