superposicion - Cómo implementar una superposición emergente que se puede mostrar sobre cualquier otra aplicación en Android
superposición de pantalla samsung j7 (5)
¿Cómo puedo implementar una superposición emergente para una aplicación que se puede mostrar sobre cualquier otra aplicación?
Facebook implementó una característica muy similar llamada Chatheads en su nueva versión de Facebook Messanger. Estaba realmente sorprendido de ver que esto es de alguna manera posible. En la imagen, ves un chathead (perro a la derecha) sobre otra aplicación.
Cada actividad, diálogo y servicio se adjunta con una ventana. Facebook mantiene un servicio ejecutándose en segundo plano y en el servicio al que captan el objeto del administrador de ventanas
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Cree los parámetros de diseño necesarios al agregar su vista
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);
ahora agregue su vista al administrador de ventanas siguiendo el método
windowManager.addView(yourView, params);
Sé que es tarde para publicar la respuesta, la publicaré de todos modos para otras personas que están buscando la respuesta
This es un ejemplo mínimo, simple y general de una superposición flotante de estilo "cabeza de chat".
Utiliza el siguiente código para hacer que las cosas floten:
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
chatHead = new ImageView(this);
chatHead.setImageResource(R.drawable.floating);
final 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);
La fuente de fuente completa se puede encontrar here (bajo la licencia de Apache).
El código fuente completo está aquí: http://www.piwai.info/chatheads-basics
Nota: Necesitará <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
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.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
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);
}
}