我正在尝试创建一个始终操作顶部按钮/可点击图像,它始终位于所有窗口的顶部.
概念证明是
我已经成功并且现在有一个正在运行的服务.该服务始终在屏幕的左上角显示一些文本,而用户可以正常方式与其他应用程序自由交互.
我正在做的是子类ViewGroup并将其添加到带有标志的根窗口管理器TYPE_SYSTEM_OVERLAY.现在我想添加一个按钮/可点击图像来代替这个文本,它可以自己接收触摸事件.我尝试覆盖整个"onTouchEvent",ViewGroup但它没有收到任何事件.
如何仅在我的常见顶视图组的某些部分接收活动?请建议.
public class HUD extends Service {
HUDView mView;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(getBaseContext(),"onCreate", Toast.LENGTH_LONG).show();
mView = new HUDView(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
0,
// WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
// | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.TOP;
params.setTitle("Load Average");
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mView, params);
}
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我基本上试图从系统覆盖中获取所有触摸事件数据,根据此触摸数据移动我的精灵,然后允许操作系统/主屏幕/浏览器按照应有的方式对数据进行操作(反之亦然).我发现了类似的问题,但没有任何东西可以引导我到任何我未曾去过的地方:
(已实现,结果如下) 创建系统覆盖窗口(始终在顶部)
我可以做什么:
我可以通过移动我的精灵并且不允许操作系统/主屏幕/浏览器看到它们中的任何一个来抓住所有触摸事件并对其进行操作,或者我可以允许触摸事件通过并且仅获得"TOUCH_OUTSIDE"我的应用程序要采取行动.
我未实现的目标:
我不能为我的生活找到一种方法来同时处理数据.我无法实现的唯一方法是:拦截我的APP中的数据并将其传递到OS/homescreen/browser以使用允许OS/homescreen/browser首先获取数据,然后以某种方式获取信息回调允许操作系统/主屏幕/浏览器获取数据,对数据进行操作,并轮询他们的滚动/位置值,以便在我的APP中对其进行操作.
我担心这是不可能的,我想我在某些文档中读到了一些我现在无法找到的内容:"无论是全部还是全无,您的视图都可以获取所有事件,或者都不是"
(为了避免混淆,我并不是说我有两个视图.我的意思是我有一个视图通过覆盖操作系统/主屏幕/浏览器的活动/服务来控制.如果你愿意,就像一块玻璃.)
感谢您提供的任何有用信息,非常感谢!
[更新]在下面的问题上发表我自己的文档,以免混淆.