我正在尝试创建一个始终操作顶部按钮/可点击图像,它始终位于所有窗口的顶部.
概念证明是
我已经成功并且现在有一个正在运行的服务.该服务始终在屏幕的左上角显示一些文本,而用户可以正常方式与其他应用程序自由交互.
我正在做的是子类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) 我想知道像SwipePad和Wave Launcher这样的应用程序是如何通过服务来检测触摸手势/事件的.这些应用程序能够检测到触摸手势,即使它不在自己的活动中.我看过整个互联网,但没有找到他们如何做到这一点.
我的主要问题是服务如何监听触摸客户/事件,就像常规活动可能会收到MotionEvents一样,即使它可能不在原始活动或上下文中.我本质上是在尝试构建一个应用程序,该应用程序将从用户处重新识别特定的触摸手势,无论哪个Activity位于顶部,并在该手势被识别时执行某些操作.触摸识别将是在后台作为服务运行的线程.
预计onUserInteraction正在为任何用户交互调用.它运作良好PreferenceActivity.但是,当a DialogPreference弹出时,onUserInteraction即使存在用户交互,例如触摸事件,也不再调用.
似乎 DialogPreference并非唯一的情况.无论何时Dialog显示,它都不会报告用户与活动的交互.
但如果我真的需要它,我该怎么办呢.谢谢.