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