Почему метод 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;
    }
});

4 ответа

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

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

 override fun onTouchEvent(event: MotionEvent): Boolean {
        return true
    }

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

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

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

Другие вопросы по тегам