2014-06-13 16 views
5

Ho creato uno service che sovrascriverà un'immagine sopra l'intero schermo.Android Crea immagine "Ghost" (Touch-through)

Questa parte è il codice che sovrapporre l'immagine in cima al tutto lo schermo:

@Override public void onCreate() { 
    super.onCreate(); 

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

    img = new ImageView(this); 
    img.setImageResource(R.drawable.image); // Image is .png format 

    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.CENTER | Gravity.CENTER; 
     params.x = 0; 
     params.y = 0; 

     windowManager.addView(img, params); 
} 

Tuttavia, qualsiasi spazio che l'immagine copre in intoccabile. Voglio che l'immagine da solo sovrapposto, senza influenzare altri componenti sullo schermo, simile a quello che fa questo:

CPU usage overlay example

Come posso rendere la zona sotto l'immagine tangibile (touch-through)?

Modifica
Sembra che lo spazio trasparente dell'immagine riempie un quadrato, e copre lo schermo (FYI). Quindi il mio obiettivo finale è di rendere l'immagine touch-through.

Ho provato la classe popupWindow, consigliata da alcuni utenti SO, ma il suo scopo non soddisfa le mie esigenze e non funziona.

+0

È possibile utilizzare un RelativeLayout sotto ImageView con colore di sfondo come # 99000000, parte importante "# 99" su colore Alpha o utilizzare colori trasparenti e aggiungere eventi onClick a RelativeLayout – Aspicas

+0

Funziona se si aggiunge 'return false' in onTouchListener di una visualizzazione di immagini, quindi l'evento di tocco può essere passato al layout relativo? –

+0

L'impostazione 'return false' on onTouchListener non ha funzionato. Sembra che l'immagine stia causando il problema: lo spazio vuoto. C'è un modo per rimuovere lo spazio vuoto? – jyoon

risposta

1

Ho trovato che WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY risolve il problema.

0

provare a impostare il flag param a:

WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH 

Ho provato questo con successo prima. Gli ultimi due contribuiranno a inviare eventi di tocco alle viste che lo seguono.

+0

Siamo spiacenti, questo non ha funzionato. – jyoon