2010-07-09 116 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);所以確保真實,以避免這種情況。