关于onTouch事件的一些归纳和理解

记得最早有一次做长短点击的时候,出过一次错误,修改了OnLongClickListener里面的返回值,导致长按事件触发后同样会触发点击事件。纳闷了好久也没明白,就是稀里糊涂的改了返回值,然后正常了。

前几天做一个按钮的点击动画,想偷懒,如果在drawable中像selector一样能配置就好了,结果不能的(我真是异想天开,哈哈哈);然后只能找个触发时机了:onClick要放手才行,onLongClick点击有不会触发,只好问朋友怎么办。朋友说:你傻啊,onTouch啊!哦!对啊,还有这个呢,然后我直接写在了OnTouchListeneronTouch方法里,动画是能动了,但是一直在触发,我刻意手指不动还是触发好几次,郁闷了;突然想起来以前用别人代码的时候好像还有DOWN MOVE 、 UP等区别,我就试了一下,把代码妥妥搞定了;瞬间对touch这些事件有了顿悟感。

于是查别人资料加上自己的理解,归纳了一下几条(借鉴了别人的劳动成果,但是忘了记下来了,抱歉!):

 

1.onTouch()里面的返回boolean值表示事件是否被消费,可以理解为“是否这里是否后执行”或者“是否由下一层继续执行”;

2.为控件设置的OnTouchListener()的优先级高于控件本身的TouchEvent();

3.touchEvent()或者onTouch()接收的是DOWNMOVEUP等几个事件,希望执行一遍的代码最好按照需要放在对应的分支里面,以免额外的执行;

4.即使是你感觉手指放在控件上没动,由于灵明度问题,onTouch的事件也是在一直调用的。

5.onTouch事件中:down事件返回值标记此次事件是否为点击事件(返回false,是点击事件;返回true,不记为点击事件),而up事件标记此次事件结束时间,也就是判断是否为长按false计时结束,true一直计时不结束

6.如果根据up标记事件为LongClick方法,那么就会截断click方法,只执行LongClick方法;没有LongClick方法的消费,长按也依旧执行click方法。

7.onInterceptTouchEventviewgroup内部的监听器,view里面没有这个方法;它是用来看看子控件有没有什么事件之类(返回false寻找子控件的事件,true截断不往下传);子控件的事件没有消费掉后执行自己的onTouch方法。

8.一次点击中,只要移动时没有离开目标控件,没有被MOVE消费,那么它还是该点击事件。

9.OnLongClick的触发是按住的时间点到达要求就触发,跟后续是不是不在按没什么关系。

 

如果那里不对,还请指正,免得继续误导他人,谢谢!

BY SHAREYE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公贵买其鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值