2012-09-25 13 views
13

Tôi muốn đọc khi người chơi chạm vào màn hình và khi không.Trong onTouchEvent, ACTION_UP không hoạt động

@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); 
} 

Mã này, vâng, nó hoạt động, nhưng chỉ khi người chơi chạm vào màn hình (ACTION_DOWN), nhưng khi ông không chạm vào màn hình (ACTION_UP), không có gì xảy ra:/ LogCat

^Đây là hình thức màn hình LogCat. Bạn có thể thấy: đây chỉ là ACTION_DOWN, nhưng không có gì về ACTION_UP. Class được mở rộng xem:

public class MainClass extends SurfaceView implements SurfaceHolder.Callback { 

Bạn có thể giúp tôi?

EDIT: Trò chơi của tôi dựa trên hướng dẫn này: http://www.droidnova.com/2d-tutorial-series-part-v,848.html

Trả lời

45

tôi đoán là super.onTouchEvent đang trở lại false, như bất cứ điều gì lớp cha bạn đang gọi điện thoại không quan tâm về sự kiện liên lạc.

Nếu bạn trả lại false thành onTouchEvent, khi đó hệ điều hành Android sẽ không còn thông báo cho bạn về bất kỳ sự kiện nào khác trong cử chỉ đó. Nếu bạn muốn tiếp tục nhận thông tin sự kiện chạm (ví dụ: ACTION_UP), thì bạn phải trả lại true cho sự kiện ACTION_DOWN đầu tiên.

+0

CÓ! Cảm ơn bạn! – user1019901

+2

Nó cảm thấy sooo tốt để có được một câu trả lời tốt, đầy đủ, thông tin cho vấn đề của bạn. :) Cảm ơn @Tim! –

+0

Chỉ là những gì tôi cần! Cảm ơn! – inteist

0

thử:

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

Thật không may, nó không hoạt động:/Trò chơi của tôi dựa trên điều này: http://www.droidnova.com/2d-tutorial-series-part-v,848.html – user1019901

1

giải pháp "petey" đã làm việc cho tôi! Ngoại trừ một số lỗi cú pháp, được sửa tại đây:

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

Cảm ơn rất nhiều.

Các vấn đề liên quan