Eso se hace usando una superposición en la parte superior de la actividad existente independientemente. Puede encontrar la fuente que se encuentra aquí en mi github para demostrar la prueba de concepto que estaba en la pregunta stackexchange.com de android en la que alguien que sufría de una discapacidad y no podía deslizar la pantalla para desplazarse y estaba buscando una manera de hacerlo convenientemente, en el cual improvisé el código para mostrar 'Page Up/Page Down' con un movimiento mínimo, solo tocando el texto (en realidad, es un botón) que se superpone sobre una actividad. Pero debido a la forma en que funcionaron Android y la seguridad, el evento de desplazamiento no se pudo inyectar en la actividad en ejecución.
La forma en que funciona es la siguiente, a partir de la actividad onCreate
no es esto
WindowManager.LayoutParams layOutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
La bandera que se necesita es WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY
y WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
.
La responsabilidad es garantizar que se manipule el tacto, lo que significa vigilar cuando el evento táctil 'golpea' en un área y actuar en consecuencia. "Escuchando" en el caso de la vista 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, imaginemos un botón dentro de ese myview
diseño, por lo que el uso de un aparato de botón,
Button myButton = (Button)myView.findViewById(R.id.myButton);
Rect outRectHit = new Rect();
myButton.getHitRect(outRectHit);
Ahora tenemos que determinar la 'colisión' de los límites del tacto, lo que sucede dentro del manejador 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 de correo xplains cómo hacer algo como una superposición en la parte superior de cualquier actividad.
Solo para asegurarse de que el código se depure y no interfiera de ninguna forma o forma con ninguna actividad mostrada. Por ejemplo, ¿qué sucede si la actividad es, de hecho, un juego OpenGL, qué haces?
Esto es para ilustrar lo que debe vigilarse.
Parece prometedor, ¿es gratis? –