2012-09-25 25 views
13

Bir oyuncu ekrana dokunduğunda okumak istiyorum çalışmak ve etmez. ^/ LogCatonTouchEvent yılında ACTION_UP

:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if(event.getAction() == MotionEvent.ACTION_UP){ //ACTION UP 
     actionOnUP = true; 
     Log.v("MC", "Up"); 
    } 
    if(event.getAction() == 0){ //ACTION DOWN 
     actionOnUP = false; 
     Log.v("MC", "Down"); 
    } 
    Log.v("MC", event.getAction() + " "); 
    return super.onTouchEvent(event); 
} 

Bu kod, evet, çalışır, ancak sadece oyuncu ekranı (ACTION_DOWN) dokunun, ama ekran (ACTION_UP) dokunarak olmadığında, hiçbir şey olmuyor Bu ekran formu LogCat. Bu sadece ACTION_DOWN olmakla ACTION_UP hakkında hiçbir şey: görebilirsiniz.

public class MainClass extends SurfaceView implements SurfaceHolder.Callback { 

Bana yardım edebilir: Sınıf Görünümü uzatıyor?

DÜZENLEME: Oyunum Bu eğitimde dayanmaktadır: http://www.droidnova.com/2d-tutorial-series-part-v,848.html

cevap

45

Benim tahminim olarak, super.onTouchEvent false dönen olmasıdır sen umursamayan aradığınız ne olursa olsun üst sınıf Dokunma olayı hakkında.

OnTouchEvent ürününe false döndürürseniz, Android OS artık bu hareketle ilgili başka herhangi bir olay hakkında sizi uyarmayacaktır. Eğer dokunma olayı bilgilerini (örneğin ACTION_UP) almaya devam etmek istiyorsanız, o zaman ilk ACTION_DOWN olay true dönmelidir.

+0

EVET! Teşekkür ederim! – user1019901

+2

Bu sizin soruna iyi, eksiksiz, bilgilendirici cevap almak için cook iyi hisseder. :) Teşekkürler @Tim! –

+0

Sadece ihtiyacım olan şey! Teşekkürler! – inteist

0

deneyin:

int action = event.getAction(); 
int code = action & MotionEvent.ACTION_MASK; 
if (code == MotionEvent.ACTION_POINTER_UP || code == MotionEvent.ACTION_UP || MotionEvent.ACTION_CANCEL) { 
+0

Ne yazık ki, çalışmaz:/Benim oyun dayanır bu tarih: http://www.droidnova.com/2d-tutorial-series-part-v,848.html – user1019901

1

"Petey" adlı çözüm benim için çalıştı! Burada düzeltilmiş bazı sözdizimi hataları hariç :

int code = event.getAction() & MotionEvent.ACTION_MASK; 
if ((code == MotionEvent.ACTION_POINTER_UP) || (code == MotionEvent.ACTION_UP) || (code == MotionEvent.ACTION_CANCEL)) { 

Çok teşekkürler.