В 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. Вы можете видеть: это только 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) {