Подтвердить что ты не робот

В 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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

попробуйте:

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