我正在尝试在我正在制作的应用中实现双指缩放,并且遇到onTouch事件的问题。它似乎指针向上&向下动作不会立即触发,就像在动作移动发生之前你不会向上或向下指示。那么如果两个手指几乎同时击中屏幕会发生什么呢?第二个手指(应该是指针(1))在调用指针之前获得移动动作,使得代码认为它是DRAG而不是捏缩放。有人见过这个吗?不管怎么说呢?感谢。
答案 0 :(得分:32)
确保在交换机中包含MotionEvent.ACTION_MASK。例如:
switch(event.getAction() & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
some code
break;
case MotionEvent.ACTION_POINTER_DOWN:
ETC
答案 1 :(得分:1)
面临同样的问题 事实证明当我触摸第二根手指并且在ACTION_MOVE被解雇之后,我的应用程序中触发了ACTION_POINTER_2_DOWN getAction()方法给出了需要根据此列表检查的事件编号
答案 2 :(得分:0)
我的项目中遇到了同样的问题。如果我触摸屏幕并且我的手指距离太远,则系统不会实现多点触控事件。我认为这是因为当你的手指距离太近时,系统会将其视为一根手指。
也许您可以使用getSize()方法检查此假设,以便在用一根手指触摸屏幕时以及用两根手指靠近屏幕触摸屏幕时估计屏幕被按下的区域。
答案 3 :(得分:0)
原来是我向我的Evo闪过的Custom ROM出了问题。再次感谢hara的建议,因为结果证明这是我的另一个错误。
答案 4 :(得分:0)
我用这个解决了同样的问题:
switch(event.getActionMasked()) {
case MotionEvent.ACTION_POINTER_DOWN:
//your code
break;
}
答案 5 :(得分:0)
我注意到,如果 onTouch(event)方法返回为true ,则会触发此(MotionEvent.ACTION_POINTER_DOWN)案例:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(motionEvent.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_POINTER_DOWN:
//your code
break ;
}
return true;
}
注意: 如果onTouch()方法返回一个布尔值为返回 super.onTouchEvent(event); ,则仅调用MotionEvent.ACTION_DOWN,因此请确保为true以避免出现这种情况。