Я пытаюсь нарисовать полноэкранный оверлей, который будет поглощать все сенсорные события и запускать некоторые действия при наступлении определенного сенсорного события.Например, вернуться назад, когда проведите пальцем влево. См. Это приложение
Я мог бы успешно показать оверлей со следующим кодом
WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
TYPE_APPLICATION_OVERLAY,
FLAG_WATCH_OUTSIDE_TOUCH| FLAG_NOT_TOUCH_MODAL| FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.LEFT | Gravity.TOP;
windowManager.addView(pieControl, params);
container.setOnTouchListener(new View.OnTouchListener() {...});
Макет выглядит следующим образом
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<RelativeLayout
android:id="@+id/pie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent">
<RelativeLayout
android:id="@+id/parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/control"
android:layout_width="25dp"
android:layout_height="150dp"
android:layout_centerInParent="true"
android:background="@drawable/noname" />
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/arrow_left"/>
</RelativeLayout>
</RelativeLayout>
Это успешно отрисовывает общесистемный оверлей, и я получаю все сенсорные события.Но сенсорные события не передаются другим приложениям и потребляются моим приложением.
Я не могу использовать флаг TYPE_SYSTEM_OVERLAY
, так как я нацеливаюсь на Android 8.0.Я также попытался этот ответ , но он больше не будет работать, начиная с Android 8.0.
Я хочу использовать все события касания только для проверки жеста, сделанного пользователем, в противном случае онидолжен работать как обычное касание и делегировать другим приложениям.Что может быть не так?
РЕДАКТИРОВАТЬ
Есть подобный вопрос здесь , но у него нет ответа.Но я считаю, что это выполнимо, так как я видел приложения в Play Store, которые делают это.