WindowManager 上的 ImageView - 单击/触摸/滑动
ImageView on WindowManager - click / touch / swipe through
我创建了一个小服务,就像这里一样:
public class ChatHeadService extends Service {
private WindowManager windowManager;
private ImageView chatHead;
@Override public IBinder onBind(Intent intent) {
// Not used
return null;
}
@Override public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
chatHead = new ImageView(this);
chatHead.setImageResource(R.drawable.android_head);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 100;
windowManager.addView(chatHead, params);
}
@Override
public void onDestroy() {
super.onDestroy();
if (chatHead != null) windowManager.removeView(chatHead);
}
}
唯一不同的是我的ImageView在宽度和高度上是MATCH_PARENT,里面的图像是99%透明的。
一切正常,但在服务运行时我无法触摸、滑动或其他任何东西。我希望 ImageView 对于与用户的任何触摸交互完全隐藏 - 就像 ImageView 只不过是玻璃上的贴纸。
我尝试了 setClickable(true / false) 和 als 来覆盖 onTouchEvent 并返回 true / false,但无济于事。
关于如何完成此操作的任何帮助?
P.S.: 我知道这不是一个严肃的应用程序所期望的行为,但这只是我和我的朋友们的一个小笑话应用程序。
好的,对于以后想知道的人 - 将我的标志更改为
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
成功了。 FLAG_NOT_TOUCHABLE 将使视图与任何触摸输入完全无关。在我的示例中,我可以用半透明的 ImageView 覆盖我的整个屏幕,并且仍然可以正常使用我的启动器等。
我创建了一个小服务,就像这里一样:
public class ChatHeadService extends Service {
private WindowManager windowManager;
private ImageView chatHead;
@Override public IBinder onBind(Intent intent) {
// Not used
return null;
}
@Override public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
chatHead = new ImageView(this);
chatHead.setImageResource(R.drawable.android_head);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 100;
windowManager.addView(chatHead, params);
}
@Override
public void onDestroy() {
super.onDestroy();
if (chatHead != null) windowManager.removeView(chatHead);
}
}
唯一不同的是我的ImageView在宽度和高度上是MATCH_PARENT,里面的图像是99%透明的。
一切正常,但在服务运行时我无法触摸、滑动或其他任何东西。我希望 ImageView 对于与用户的任何触摸交互完全隐藏 - 就像 ImageView 只不过是玻璃上的贴纸。
我尝试了 setClickable(true / false) 和 als 来覆盖 onTouchEvent 并返回 true / false,但无济于事。
关于如何完成此操作的任何帮助?
P.S.: 我知道这不是一个严肃的应用程序所期望的行为,但这只是我和我的朋友们的一个小笑话应用程序。
好的,对于以后想知道的人 - 将我的标志更改为
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
成功了。 FLAG_NOT_TOUCHABLE 将使视图与任何触摸输入完全无关。在我的示例中,我可以用半透明的 ImageView 覆盖我的整个屏幕,并且仍然可以正常使用我的启动器等。