Android自定义View中如果onTouchEvent()返回true,那么onTouchEvent()中的代码就会被执行两次,请问这是为什么?
返回true不就是被拦截了吗?会不会是你的代码里就有两次,或者在down 、move、up的时候有处理
除了onTouchEvent()以外再没有重写过任何与触摸相关的方法,而且我返回false就很正常,用Toast显示的信息很明白,(返回true调用两次,返回false调用一次)我想不通的是为什么所有资料都没有对这种情况的解释
你返回false正常,那么你的onTouchEvent很可能是在其他地方主动调用的,而且调用没有理会onTouch的返回值,不管返回true或false都继续.
返回false理论上是不执行down以外的事件的
重写dispatchTouchEvent之类的方法里面主动调用了
或者onIntecptTouchEvent,或者父控件主动调用了该View的onTouchEvent事件
我上面的猜测可能想复杂了
你onTouch事件并没有区分down 、move、up吧.当然会分别执行down 和up了,你移动还会执行move呢
你返回false,就执行一次,因为那次是down,down之后就不能执行了
两次应该是 down move up 这些触摸事件吧
返回true执行两次应该是down和move,如果返回false那么down之后的事件就会传递给上一层控件由上一层处理,做不到你想要的效果
还是多了解一下Android的事件分发的内部机制吧
http://blog.csdn.net/seu_calvin/article/details/52566965