我正在尝试绘制一个全屏叠加层,该叠加层将消耗所有触摸事件并在发生特定触摸事件时触发一些操作。例如向左滑动时向后导航。 Refer this app
我可以使用以下代码成功显示叠加层
GET _cluster/state/metadata?pretty&filter_path=**.stored_scripts
布局如下
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() {...});
这成功渲染了系统范围的覆盖,并且我得到了所有触摸事件。但是触摸事件不会传递给其他应用程序,并且会被我的应用程序占用。
由于我的目标是Android 8.0,因此无法使用标志<?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>
。
我也尝试过this answer,但从Android 8.0开始,它将不再起作用。
我想消耗所有触摸事件仅用于检查用户做出的手势,否则,它们应该像正常触摸一样工作并委托给其他应用。这里可能出什么问题了?
编辑
有similar question here,但没有答案。但是我相信它是可行的,因为我已经在Play商店中看到了可以做到的应用程序。