Как нарисовать представление поверх всего?

Я хочу создать приложение, которое может создавать уведомления на экране поверх всего, что отображается в данный момент. Что-то вроде всплывающего сообщения Go SMS или что-то вроде ChatHead на следующем рисунке:

введите описание изображения здесь

Было бы даже лучше, если бы можно было динамически рисовать, включая события касания. Каков обычный или стандартный способ сделать это?

Пример:

Как значок, который можно щелкнуть или перетащить, независимо от того, находитесь ли вы на главном экране или в приложении или в другом приложении. Обратите внимание на круговые значки возле краев экрана в опубликованной картинке. Вы можете перетащить их в любом приложении.

Вот как работают тосты и диалоговые windows:

В случае, когда простое добавление или вывод на передний план не работает, скажите, когда у вас есть служба, добавьте свой собственный вид в другую деятельность или приложение клиента (FaceUnlock делает это) или вы не можете зависеть от иерархий, вам нужно использовать окно менеджер и токен windows, чтобы сделать трюк. Затем вы можете создавать макеты и использовать анимацию и аппаратное ускорение, как и раньше.

WindowManager windowManager = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.FIRST_SUB_WINDOW); layoutParams.width = 300; layoutParams.height = 300; layoutParams.format = PixelFormat.RGBA_8888; layoutParams.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; layoutParams.token = getWindow().getDecorView().getRootView().getWindowToken(); //Feel free to inflate here mTestView = new View(this); mTestView.setBackgroundColor(Color.RED); //Must wire up back button, otherwise it's not sent to our activity mTestView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { onBackPressed(); } return true; } }); windowManager.addView(mTestView, layoutParams); 

Затем обязательно удалите представление onDestroy (или onPause) или вы сработаете

  if (mTestView != null) { WindowManager windowManager = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE); if (mTestView.isShown()) { windowManager.removeViewImmediate(mTestView); } } 

Для этого вам не нужна новая деятельность. Все, что вам нужно сделать, это добавить еще один вид в вашу существующую деятельность и перенести ее на передний план, а также рисовать / записывать то, что вы хотите в этом представлении.

Если вы хотите делать специальные вещи с помощью этого дополнительного представления, вы можете создать свой собственный class представления

 class DrawOnTop extends View { public DrawOnTop(Context activity) { super(activity); } @Override protected void onDraw(Canvas canvas) { // put your drawing commands here } } 

и тогда вы делаете что-то вроде

 DrawOnTop mDraw = new DrawOnTop(this); addContentView(mDraw, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); mDraw.bringToFront(); 

Затем, чтобы заставить его рисовать, вам нужно использовать mDraw.invalidate ();

То, что вы ищете, это системное предупреждение.

Там есть библиотека под названием StandOut ! которые помогут вам в создании таких приложений.

Вы могли бы иметь родительский элемент всего вашего макета как RelativeLayout. Первый ребенок является «корнем» вашего основного макета. Все, что после этого можно считать наложением, которое можно разместить на ваших капризах.

Пример:

   ... Main Layout here ...    

Лучший способ – запустить сервис с вашим приложением. Создайте ImageView. Установите LayoutParams изображения. Добавьте представление вместе с параметрами в оконный менеджер при создании службы.

ALL SET Ваше изображение прикрепляется к вашему окну (на любом экране во всех приложениях), пока приложение не будет закрыто.

Вы даже можете добавить onclicklisteners и ontouchlisteners в изображение. Например. Слушатели OnClick выполняют некоторые действия, а Ontouchlisteners перемещают изображение по экрану.

  • Android: не могу понять, как использовать setImeActionLabel
  • Является ли Java оценкой оставшихся условий после того, как известен логический результат?
  • Время ожидания экрана Android
  • Как получить URL из хранилища Firebase getDownloadURL
  • ksoap2 org.xmlpull.v1.xmlpullparserexception Ожидаемая ошибка start_tag
  • Правильный способ реализации равного контракта
  • Ошибка Android «gps требует ACCESS_FINE_LOCATION», хотя мой файл манифеста содержит это
  • Android загружает двоичные файлы
  • Различия в виджетах для Android
  • AlertDialog изнутри BroadcastReceiver ?? Это можно сделать?
  • Получение SMS-сообщений в Android-приложении
  • Давайте будем гением компьютера.