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

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

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

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

Пример:

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

Solutions Collecting From Web of "Как нарисовать представление поверх всего?"

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

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

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

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

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 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 ();

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

Пример:

 <RelativeLayout> <LinearLayout> ... Main Layout here ... </LinearLayout> <TextView left="20dip" top="20dip" text="Overlay" alpha="0.7" /> </RelativeLayout> 

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

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

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