2009-06-07 3 views
70

È possibile avere visualizzazioni sovrapposte in Android? Mi piacerebbe avere un ImageView con un png trasparente nella parte anteriore e un'altra vista sullo sfondo.Visualizzazioni sovrapposte in Android

edit:

Questo è quello che ho in questo momento, il problema è che l'immagine nel IMAGEVIEW non è trasparente, le parti che dovrebbero essere trasparenti sono solo nero.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/gallerylayout" 
> 
<Gallery android:id="@+id/overview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 

<ImageView android:id="@+id/navigmaske" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:src="@drawable/navigmask" 
    /> 

</RelativeLayout> 

edit:

ho preso a lavorare, si trattava di un file del tema da un altro programmatore sulla squadra. appena cambiato questo

<item name="android:background">#FF000000</item> 

a questo

<item name="android:background">#00000000</item> 
+0

Cosa hai dovrebbe funzionare - Sei sicuro che la Galleria ha contenuti visibili e che il navigmaske drawable è un PNG con trasparenza? –

+0

Sì, la galleria è visibile senza l'overlay e sono sicuro che il PNG è trasparente –

risposta

68

Android gestisce la trasparenza delle viste e dei disegni (incluse le immagini PNG) in modo nativo, quindi lo scenario che descrivi (uno ImageView parzialmente trasparente di fronte a uno Gallery) è certamente possibile.

In caso di problemi, potrebbe essere correlato al layout o all'immagine. Ho replicato il layout che descrivi e ottenuto con successo l'effetto che stai cercando. Ecco il layout esatto che ho usato.

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gallerylayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <Gallery 
    android:id="@+id/overview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 
    <ImageView 
    android:id="@+id/navigmaske" 
    android:background="#0000"  
    android:src="@drawable/navigmask" 
    android:scaleType="fitXY" 
    android:layout_alignTop="@id/overview" 
    android:layout_alignBottom="@id/overview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 
</RelativeLayout> 

Nota che ho cambiato il genitore RelativeLayout ad un'altezza e la larghezza fill_parent come è generalmente ciò che si desidera per un'attività principale. Quindi ho allineato la parte superiore e inferiore dello ImageView nella parte superiore e inferiore dello Gallery per garantire che sia centrato di fronte ad esso.

Ho anche impostato in modo esplicito lo sfondo dello ImageView per essere trasparente.

Per quanto riguarda l'immagine che si può disegnare, se si mette il file PNG da qualche parte per me, posso utilizzarlo nel mio progetto e vedere se è responsabile.

+0

Bello! Ho provato a impostare uno sfondo ImageView su # 0000 (e @android: color/transparent) ... inutilmente. Se provo a sbiadirlo (alfa da 1.0 in giù a 0.0) sfuma in nero invece di dissolvenza in trasparente. Questo è su Android 2.0. –

+3

A-ha! Stavo usando LinearLayout. L'ho cambiato in Relativo, quindi l'ultimo ImageView. Ora la dissolvenza "funziona" ... yay! Grazie mille per il codice/tip. Questo mi ha spinto a fare il mio dovere. –

+2

Ciao sto usando la stessa codifica di layout xml ma la mia immagine trasparente non viene visualizzata. Mostra solo la schermata nera. Tutto ciò che voglio aggiungere nel mio codice. – David

-2

Sì, è possibile. La sfida, tuttavia, è di fare correttamente il loro layout. Il modo più semplice per farlo sarebbe avere un AbsoluteLayout e quindi inserire le due immagini dove vuoi che siano. Non è necessario fare nulla di speciale per il png trasparente, tranne per averlo aggiunto in seguito al layout.

+15

AbsoluteLayout è ora deprezzato. Nessuno dovrebbe usarlo più. – num1

1

Visibile la visibilità delle modifiche alla galleria, ovvero il modo in cui la galleria si sovrappone a un'altra vista. l'app di esempio Home ha alcuni buoni esempi di questa tecnica.

9

Inoltre, dai uno sguardo allo FrameLayout, ecco come l'applicazione Galleria fotografica implementa i pulsanti Zoom.

+1

Sono sempre andato per 'FrameLayout' che trovo perfetto per tali scopi. Tuttavia, ho appena scoperto che prima di API 11, FrameLayout non riesce a propagare l'altezza massima misurata a tutti i suoi figli, [vedi qui] (http://stackoverflow.com/q/15780884/1856738). Quindi, per supportare Android 2, si deve usare 'RelativeLayout' a meno che non si operi per un'altezza predeterminata. –

7

Se si desidera aggiungere la schermata Overlay personalizzata in Layout, è possibile creare un layout lineare personalizzato e ottenere il controllo del disegno e degli eventi chiave. È possibile il mio Overlay tutorial- su Android Layout- http://prasanta-paul.blogspot.com/2010/08/overlay-on-android-layout.html

+0

Certamente un bel esperimento, grazie per aver condiviso il codice. Ma questo può essere semplicemente ottenuto con 'FrameLayout' a meno che il tuo scenario specifico sia influenzato da un bug pre-API 11, [vedi qui] (http://stackoverflow.com/q/15780884/1856738), nel qual caso puoi ancora usa 'RelativeLayout'. –

0

I simples modo arround è quello di mettere margine -40dp al buttom della ImageView superiore