Android Touch UP не работает

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

Проблема в том, что событие ACTION_DOWN работает отлично, я получаю отладку консоли "Touching 1" и "Touching 2", но ACTION_UP,ACTION_CANCEL или default: не работают, я не могу понять это, поэтому любая помощь будет очень признательна, спасибо

        public void doTouch(MotionEvent event)
        {
            int action = event.getAction();

            float x = event.getX();
            float y = event.getY();

            switch(action)
            {
            case MotionEvent.ACTION_DOWN:
                if(x < 125 && y < 125){
                    for(AnimatedSprite a:mSprites)
                    {
                        if(a.getID() == 1)
                        {
                            a.AdvanceToFrame(0);
                            touching = true;
                            System.out.println("Touching 1");
                            //touch_obj1 = true;
                        }
                    }
                }
                else if(x > getWidth()-125 && y > getHeight()-125)
                {
                    for(AnimatedSprite a:mSprites)
                    {
                        if(a.getID() == 2)
                        {
                            a.AdvanceToFrame(1);
                            System.out.println("Touching 2");
                            touching = true;
                            //touch_obj2 = true;
                        }
                    }
                }
                else
                {
                    touching = false;
                }
                break;
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:

                    System.out.println("Touch UP");
                    touching = false;
                    break;

                default:
                    System.out.println("NOT Touching");
                    touching = false;
                break;
            }
        }

вот где я вызываю функцию doTouch

public boolean onTouchEvent(MotionEvent event)
        {
            thread.doTouch(event);
            return super.onTouchEvent(event);
        }

2 ответа

Решение

Похоже, ваша проблема в том, как вы обрабатываете сенсорные события в onTouchEvent, Вы должны вернуть истину из onTouchEvent если вы хотите обрабатывать сенсорные события. Итак, если вы получите ACTION_DOWN и вернуть ложь из onTouchEvent система не будет отправлять вам больше событий касания до следующего ACTION_DOWN событие.

Не зная точно, что вы делаете с сенсорными событиями, я не могу дать вам решение, которое определенно подойдет для вашей ситуации, но если вы хотите получать любые сенсорные события, кроме ACTION_DOWN вам нужно будет вернуть истину из onTouchEvent,

Хорошо, я исправил это, что я должен был сделать, это

1) я изменил функцию, чтобы она могла возвращать

boolean public bool doTouch(MotionEvent event)

2) конечно я вернул true в конце этой функции

3) при звонке я так и сделал

  public boolean onTouchEvent(MotionEvent event)
    {
        return doTouch(event);
    }
Другие вопросы по тегам