В 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
Ответы
Ответ 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) {