2010-07-09 136 views
6

我想在我正在制作的应用程序中实现捏缩放,并且遇到了有关onTouch事件的问题。看起来,指针向上的动作不会立即触发,就像您在动作移动发生之前不会获取指针一样。因此,如果两个手指几乎同时触碰屏幕,会发生什么情况:第二根手指(应该是指针(1))在指针向下调用之前会发出移动动作,使代码认为它是DRAG而不是缩放。其他人看过这个?无论如何围绕它?谢谢。onTouch事件有时不会触发ACTION_POINTER_DOWN

回答

0

我在我的项目中遇到了同样的问题。如果我触摸屏幕并且手指太接近,系统不会实现多点触控事件。我认为这是因为当你的手指太接近时,系统会将它视为一根手指。

也许你可以使用getSize()方法来检查这个假设,以估计当您用单根手指触摸屏幕时以及用两根手指触摸屏幕时靠近屏幕的区域。

+0

感谢您的建议,这将派上用场,我敢肯定。但我不确定这是我的问题,因为无论我在哪里触摸屏幕,它都会发生。使用调试器,我可以看到指针向上和向下事件似乎总是被延迟,并发生在移动事件之后(并且移动事件在该实例中总是只有一个指针)。我甚至尝试过“Dotty”应用程序,并可以在其中看到相同的行为。这可能是硬件问题吗?我有一个Evo w /定制ROM。谢谢。 – JStew 2010-07-10 16:16:47

0

原来是我用闪存传给我的Evo的自定义ROM的一个问题。再次感谢哈拉的建议,因为那竟然是我的另一个错误。

1

面临着同样的问题 原来,ACTION_POINTER_2_DOWN在我的应用程序被解雇时,我感动了第二根手指和ACTION_MOVE被解雇 后的getAction()方法给出了需要对这份名单

要检查的事件数量
+0

http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_MOVE – Omkar 2011-09-02 12:55:59

29

一定要在您的交换机中包含MotionEvent.ACTION_MASK。例如:

switch(event.getAction() & MotionEvent.ACTION_MASK){ 
case MotionEvent.ACTION_DOWN: 
some code 
break; 
case MotionEvent.ACTION_POINTER_DOWN: 
ETC 
+0

WOW!这实际上解决了我的问题!我无法弄清楚为什么...但是嘿!谢谢:D – Supercelo 2014-06-27 15:00:42

+0

你真实的mvp @tayler! – Sipty 2015-07-02 09:57:34

+0

你救了我的一天亲爱的.. thnxx很多! – 2015-08-22 06:28:46

0

我已经解决了同样的问题与此:

switch(event.getActionMasked()) { 
    case MotionEvent.ACTION_POINTER_DOWN: 
     //your code 
    break; 
} 
0

我已经注意到,如果onTouch(事件)方法返回被解雇这个(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; 
} 

注: MotionEvent.ACTION_DOWN才刚刚听取如果onTouch()方法具有r个设置了一个布尔值作为返回值super.onTouchEvent(event);所以确保真实,以避免这种情况。