我正在尝试创建一个始终操作顶部按钮/可点击图像,它始终位于所有窗口的顶部.
概念证明是
我已经成功并且现在有一个正在运行的服务.该服务始终在屏幕的左上角显示一些文本,而用户可以正常方式与其他应用程序自由交互.
我正在做的是子类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) 我试图在系统覆盖视图上获得多个触摸事件,但我只接收 MotionEvent.ACTION_OUTSIDE事件.
是否有任何可能的方法在系统覆盖上获得多个触摸事件?
任何示例或链接都会非常有用.
我有一个高于一切坐在一个系统的覆盖Activities和Windows.唯一的问题是它只能检测MotionEvents用户何时将他/她放在屏幕上(它无法跟踪手指的移动或检测到手指抬起时).作为一种可能的解决方案,我已经实现了第二个视图(我将其称为跟踪视图),该视图能够处理所有触摸事件,但保持隐藏,直到系统覆盖检测到所需位置的触摸为止; 在那种情况下,它将调出跟踪视图.唯一的问题是,跟踪视图在用户将他/她的手指放回屏幕之前不会开始检测触摸事件.因此,为了解决这个问题,我想拦截获取触摸事件(即系统覆盖下的视图)的视图,并将其所有触摸事件转发到跟踪视图以进行处理.
有谁知道我如何获得接收所有触摸事件的视图并重定向它接收的所有触摸事件?
这个问题涉及这个问题中使用的例子.