В onTouchEvent 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);
}

этот код, да, он работает, но только когда игрок касается экрана (ACTION_DOWN), но когда он не касается экрана( ACTION_UP), ничего не происходит :/ LogCat

^ это экранная форма LogCat. Вы можете видеть: это только ACTION_DOWN, но ничего о ACTION_UP. Класс расширяет представление:

public class MainClass extends SurfaceView implements SurfaceHolder.Callback {

вы можете мне помочь?

EDIT: моя игра основана на этом учебник: http://www.droidnova.com/2d-tutorial-series-part-v,848.html

3 ответов


Я думаю, что супер.onTouchEvent возвращается false, поскольку любой суперкласс, который вы вызываете, не заботится о событии касания.

если вы возвращаете false в onTouchEvent, то ОС Android больше не будет уведомлять вас о каких-либо дальнейших событиях в этом жесте. Если вы хотите продолжать получать информацию о событии касания (ACTION_UP например), то вы должны вернуть true до первого ACTION_DOWN событие.


решение "Пити" работало для меня ! Кроме некоторых синтаксических ошибок, исправленных здесь:

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

Спасибо большое.


попробуй :

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