2012-07-12 18 views

Respuesta

11

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.

5

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

por ejemplo, digamos que usted 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 flotando encima de cualquier otra aplicación.

+0

Parece prometedor, ¿es gratis? –

Cuestiones relacionadas