Почему метод getAction всегда возвращает ACTION_DOWN?

Я использую onTouchListener для макета. Я хочу сделать щелчок за пределами макета. Я установил onTouchListetener для макета. Но событие движения всегда показывает ACTION_DOWN. Даже если я коснусь вне поля зрения, он не показывает ACTION_OUTSIDE. Может ли кто-нибудь помочь мне выяснить, почему он не показывает константу ACTION_OUTSIDE. Вот код, который я использую

Layout.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.i("action",event.getAction()+"");
        if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
            Toast.makeText(getApplicationContext(), "check", Toast.LENGTH_SHORT).show();
            return true;
        }

        return false;
    }
});

person Sanal V    schedule 29.10.2012    source источник


Ответы (4)


Если вы возвращаете false, то вы показываете, что не хотите получать дальнейшие события касания. Вам нужно вернуть true, чтобы продолжить получать события движения.

person Jason Robinson    schedule 29.10.2012

Сам прослушиватель событий прослушивает одно действие события за раз. Первым, конечно же, является ACTION.DOWN, в котором показывается ваш тост.

Точно так же, как Джейсон Робинсон и пользователь 936414, вы должны вернуть его в значение true, чтобы объект или слушатель могли здесь выполнить второе действие события, ACTION.OUTSIDE.

person gorbos    schedule 29.10.2012

Очень просто исправить, добавив это:

 override fun onTouchEvent(event: MotionEvent): Boolean {
        return true
    }
person Serg Burlaka    schedule 27.11.2018

Вы получите ACTION_OUTSIDE, когда касание находится вне активности и установлен флаг FLAG_WATCH_OUTSIDE_TOUCH. См. http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_WATCH_OUTSIDE_TOUCH

person user936414    schedule 29.10.2012
comment
: Но можем ли мы установить FLAG_NOT_FOCUSABLE для линейного макета? - person Sanal V; 29.10.2012
comment
@gorbos я вернул true, теперь я получаю значения 0,1,2, то есть ACTION_DOWN, ACTION_UP, ACTION_MOVE. Не получает ACTION_OUTSIDE - person Sanal V; 29.10.2012