- 对一个View同时调用OnTouch和OnClick事件时,会导致事件冲突 (EP:OT执行A动作,OC执行B动作,实际调用时呢能会同时执行AB两个动作)
- OnClick事件本身就是在OnTouch中发生的
- 解决方法:在onTouch事件中,如果返回true,就不会执行onClick,返回false,就同时执行onClick方法,要想把OnTouch和onClick事件完全的区分
流程:
-
- OnTouch中的MotionEvent.ACTION_DOWN 时,记录下点(X1,Y1)
- 在 MotionEvent.ACTION_UP 时,记录下点(X2,Y2)
- 比对俩点之间的距离,如果小于一个较小数值(比如5)
- 就认为是Click事件,onTouch中返回false,
- 若距离较大,可以当作onTouch事件去处理,返回true:
- 注:(不会报错,但是不完美。 在点位不确定时,使用距离[Time]记录点,可能会导致点位重合,而重合会继续导致冲突,但因为比较数值的操作,执行顺序会使用一个随机数)
PS:一些理论上的东西,而且好像在哪里看到过,侵权必删QAQ