Оверлейный экран на Android

Как можно добавить представления/изображения на рабочий стол?

Лучшим примером является мессенджер facebook: если вы долго щелкнете по элементу чата, вы можете выбрать «выдвинуть чит-голову», после чего у вас появится маленькая кнопка, перекрывающая ваш экран.

Есть еще такие приложения, как разбивка экрана, изображение с разбитого дисплея перекрывает все с телефона.

Я искал его, но я понятия не имею, как он называется.

Я надеюсь, что вы, ребята, в состоянии понять мой английский.


person user2988203    schedule 18.12.2013    source источник


Ответы (1)


Ответ: SYSTEM_ALERT_WINDOW, это дает вам возможность рисовать поверх любой вещи в Android, та же функция, которую facebook использует для рисования своих чатов.

http://developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW

Образец кода:

    private WindowManager windowManager;
    private ImageView imageView;
   // Get window manager reference

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    imageView= new ImageView(YOUR_CONTEXT_HERE);
    imageView.setImageResource(R.drawable.android_head);

    // Setup layout parameter
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_PHONE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.LEFT; // Orientation
    params.x = 100; // where you want to draw this, coordinates
    params.y = 100;
    // At it to window manager for display, it will be printed over any thing
    windowManager.addView(chatHead, params);


   // Make sure to remove it when you are done, else it will stick there until you reboot
   // Do keep track of same reference of view you added, don't mess with that
   windowManager.removeView(imageView);
person Techfist    schedule 18.12.2013
comment
Спасибо, это работает, но если я хочу увидеть это после закрытия приложения, я должен использовать сервис?! - person user2988203; 18.12.2013
comment
Да, тогда вы должны использовать его через службу, пожалуйста, примите это как ответ, чтобы помочь другим :) - person Techfist; 18.12.2013
comment
У меня другая проблема, я могу удалить представление с помощью windowmanager.removeView(view), но это не дает никакого эффекта. Вторая попытка говорит, что это уже удалено, но я все еще вижу его... - person user2988203; 18.12.2013
comment
Возможно, вы напутали с экземпляром, оконный менеджер нигде не привязан к жизненному циклу активности или любым другим контекстным элементам, поэтому, если вы пропустите удаление любого прикрепленного представления до того, как контекст будет удален, он исчезнет, ​​​​он останется там, если вы не перезагрузите свое устройство, это что было бы в вашем случае, - person Techfist; 18.12.2013