WindowManager 上的 ImageView - 单击/触摸/滑动

ImageView on WindowManager - click / touch / swipe through

我创建了一个小服务,就像这里一样:

Facebook Chatheads Service

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 覆盖我的整个屏幕,并且仍然可以正常使用我的启动器等。