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

时间:2015-09-02 10:47:28

标签: android android-service android-imageview android-windowmanager

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

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。:我知道这不是一个严肃的应用程序的理想行为,但这只是为了我和我的一个小笑话应用程序。我的朋友。

1 个答案:

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