Зачем возвращать true onSurfaceView onTouchEvent ()? - PullRequest
1 голос
/ 10 ноября 2011

Я переопределяю onTouchEvent () для моего SurfaceView. Всякий раз, когда я касаюсь экрана телефона, он должен печатать координаты сенсорных событий. Это мой код:

    public class MyGestureActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "onCreate()");

        panel = new MyGesturePanel(this);
        setContentView(panel);
        }
    }

    public class MyGesturePanel extends SurfaceView implements SurfaceHolder.Callback {
    public boolean onTouchEvent(MotionEvent event) {
        Log.i(TAG, "onTouchEvent! " + event.getX() + " " + event.getY());
        return super.onTouchEvent(event);
    }
    }

Если я вернул super.onTouchEvent (событие), он напечатает только 1 событие (ACTION_DOWN), даже если я не отпустил палец на экране. Я также попытался напечатать то, что было возвращено, и оно вернуло false.

Теперь вместо использования super.onTouchEvent (событие) я вернул true. Когда я устанавливаю возвращаемое значение в true, он работает нормально. Когда я держу палец на экране, он печатает множество событий ACTION_MOVE. (хотя я не двигаю пальцем)

Почему это? Я делаю что-то неправильно? Желательно ли просто «жестко закодировать» возврат к true?

Спасибо!

1 Ответ

3 голосов
/ 10 ноября 2011

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

...