2012-07-12 19 views

risposta

11

Ciò avviene utilizzando una sovrapposizione in cima all'attività esistente a prescindere. È possibile trovare la fonte trovata qui sul mio github per dimostrare la prova del concetto che era nella domanda stackexchange.com di Android in cui qualcuno che ha sofferto di una disabilità e non poteva scorrere lo schermo per scorrere e cercava un modo per farlo comodamente, in che ho messo insieme il codice per mostrare 'Pagina su/Pagina giù' con il minimo movimento, semplicemente toccando il testo (in realtà, è un pulsante) che si sovrappone a un'attività. Ma a causa del modo in cui ha funzionato Android e sicurezza, l'evento di scorrimento non può essere iniettato nell'attività attualmente in esecuzione.

Il modo in cui funziona è questo, dall'attività onCreate c'è questa

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

La bandiera che è necessario è WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY e WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH.

L'onere è quello di garantire che il tocco venga gestito, il che significa osservare quando l'evento tattile "colpisce" su un'area e agire di conseguenza. Con "ascolto" nel sul del Visualizza evento onTouch, vale a dire:

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) { 
     .... 
    } 
}); 

Per esempio, immaginate un pulsante all'interno di tale disposizione myview, in modo da utilizzare un widget tasto,

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

Ora abbiamo bisogno di determinare la 'collisione' dei confini del tatto, che avviene all'interno del onTouch gestore:

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

Questo breve riassunto e xplains come fare una cosa come sovrapposizione di qualsiasi attività.

Giusto per assicurarsi che il codice venga sottoposto a debug e non interferisca in alcuna forma o forma con alcuna attività mostrata. Ad esempio, cosa succede se l'attività è in realtà un gioco OpenGL, cosa fai?

Questo è per illustrare ciò che deve essere guardato.

5

Si potrebbe desiderare di dare un'occhiata a Tooleap SDK. Offre il modo più semplice per trasformare normali attività Android in widget mobili.

esempio diciamo che avete un'attività chiamata MyActivity

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

MyActivity ora diventerà disponibile come un widget che galleggia in cima a qualsiasi altra applicazione.

+0

Sembra promettente, è gratuito? –

Problemi correlati