ImageView в WindowManager — нажмите / коснитесь / проведите пальцем по экрану

Я создал небольшой сервис, как здесь:

Служба чатов Facebook

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.: Я знаю, что это нежелательное поведение серьезного приложения, но это просто приложение для шутки для меня и моих друзей.


person LilaQ    schedule 02.09.2015    source источник


Ответы (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 и по-прежнему нормально использовать мою программу запуска и т. Д.

person LilaQ    schedule 15.09.2015