android的touch方法,Android 开发中踩过的坑之三:Touch事件相关方法

View嵌套的时候, Touch事件的传递, 经常让人头疼.

比如在ScrollView里, 在WebView里, 在ListView里. 事件的传递的结果会让你觉得"这太灵异了!"

麻烦的代码就不说了,如果只做上层App, 那也只有为数不多的几个方法可以让我们处理这些灵异问题:

onTouchEvent(), dispatchTouchEvent(), onInterceptTouchEvent().

并且处理的方案, 也只有控制他们的返回值.

这三个方法的返回值, 意义各不相同:

onTouchEvent():

true: "我处理了这个事件, 并且与我在同一个ViewGroup下的其他View将不能再处理这个事件"

false:"我处理了这个事件, 并且与我在同一个ViewGroup下的其他View可以继续处理这个事件"

dispatchTouchEvent()

true: "我对这个事件(通常是Down事件)感兴趣, 我将在onTouchEvent中处理这个事件"

false: "我对这个事件没兴趣, 我不会处理这个事件以及之后与这个事件相关的move, up事件"

onInterceptTouchEvent

这方法是ViewGroup的方法,

true: "我的子View将不能处理这个事件, 不会调用子View的onTouchEvent"

fasle: "我的子View可以继续处理这个事件, 我会将事件传递给子View"

如此. 基本引起灵异事件的就这仨方法了.

当发现onTouch不能工作, 检查一下View的dispatchTouchEvent是否返回了false, 或者检查一下父View的onInterceptTouchEvent是否返回了true. 当然Acitivity也是有这几个方法, 一样需要检查.

改的时候也要特别小心, 因为各种自己定义的控件, 都对相应的Touch事件有特殊处理, 所以要小心验证重写相关方法后是否会影响相关逻辑.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值