我创建了一个小型服务,就像这里一样:
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。:我知道这不是一个严肃的应用程序的理想行为,但这只是为了我和我的一个小笑话应用程序。我的朋友。
答案 0 :(得分:1)
好的,对于将来想知道的人 - 将我的旗帜改为
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覆盖整个屏幕,并且仍然可以正常使用我的启动器等。