Widget flotante / superposición en el lanzador de Android

¿Alguien tiene alguna idea de cómo se puede implementar?

Algunos ejemplos:

  • Https://play.google.com/store/apps/details?id=gpc.myweb.hinet.net.PopupWeb
  • Https://play.google.com/store/apps/details?id=gpc.myweb.hinet.net.PopupVideo
  • Https://play.google.com/store/apps/details?id=com.milone.floatwidget

¿Alguna idea? Gracias.

Eso se hace utilizando una superposición en la parte superior de la actividad existente independientemente. Usted puede encontrar la fuente encontrada aquí en mi github para demostrar la prueba del concepto que estaba en la pregunta de stackexchange.com del androide en la cual alguien que sufría de una inhabilidad y no podía deslizar la pantalla para desplazarse y buscaba una manera de hacer esto convenientemente , En el que yo embebido juntos el código para mostrar 'Page Up / Page Down' con el movimiento mínimo, simplemente tocando en el texto (en realidad, es un botón) que se superponen en la parte superior de una actividad. Pero debido a la forma en que funcionaba Android y la seguridad, el evento de desplazamiento no podía ser inyectado en la actividad en ejecución.

La forma en que funciona es esto, de la actividad onCreate hay esto

 WindowManager.LayoutParams layOutParams = new WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT); 

El indicador que se necesita es WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY y WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH .

La responsabilidad es asegurar que el tacto se está manejando lo que significa mirar hacia fuera cuando el evento táctil 'golpea' en un área y actuar en consecuencia. Al "escuchar" en el evento onTouch de onTouch , es decir:

 LayoutInflater layOutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); View myView = layOutInflater.inflate(R.layout.myview, null); myView.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { .... } }); 

Por ejemplo, imagine un botón dentro de ese diseño de myview , por lo que con un widget de botón,

 Button myButton = (Button)myView.findViewById(R.id.myButton); Rect outRectHit = new Rect(); myButton.getHitRect(outRectHit); 

Ahora necesitamos determinar la "colisión" de los límites del tacto, que sucede dentro del controlador onTouch :

 float x = event.getX(); float y = event.getY(); if (x > outRectHit.left && x < outRectHit.right && y > outRectHit.top && y < outRectHit.bottom){ ... Handle this accordingly } 

Este breve resumen explica cómo hacer algo como una superposición encima de cualquier actividad.

Sólo para asegurarse de que el código se depura y no interfiere en ninguna forma con cualquier actividad que se muestra. Por ejemplo, ¿qué sucede si la actividad es de hecho un juego OpenGL, ¿qué haces?

Esto es para ilustrar lo que hay que vigilar.

Es posible que desee echar un vistazo a Tooleap SDK . Ofrece la forma más sencilla de convertir las actividades regulares de Android en widgets flotantes.

Por ejemplo, supongamos que tiene una actividad llamada MyActivity

 Intent intent = new Intent(context, MyActivity.class); TooleapPopOutMiniApp miniApp = new TooleapPopOutMiniApp(context, intent); Tooleap tooleap = Tooleap.getInstance(context); tooleap.addMiniApp(miniApp); 

MyActivity ahora estará disponible como un widget flotante encima de cualquier otra aplicación.

  • Colocar una vista de imagen como imagen de superposición en la vista previa de la cámara
  • Superposiciones de mapa más eficientes en Android
  • Especifique Layout Margen superior para la barra de acción de superposición
  • ¿Cómo mostrar una ruta entre dos geocoords en google maps?
  • Color de relieve de superposición de círculo no dibujado siempre en Google Maps v2
  • Superponer imagen para hacer tutorial en la aplicación para Android
  • ¿Hay algún límite para dibujar la ruta usando Geocoder (Android)?
  • Agregar Overlay a un MapView en osmdroid
  • Problema de superposición de texto en ViewFlipper ..
  • No entiende el método drawAt () para com.google.android.maps.Overlay
  • Dibujo es constantemente llamado en mi superposición de mapa de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.