2009-06-07 16 views
70

¿Es posible tener vistas superpuestas en Android? Me gustaría tener un ImageView con un png transparente en el frente y otra vista en el fondo.Vistas superpuestas en Android

edición:

Esto es lo que tengo en este momento, el problema es que la imagen en el imageView no es transparente, las partes que deberían ser transparentes son sólo negro.

<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> 

edición:

Yo tengo que trabajar, que era un archivo de tema de otro programador en el equipo. acaba de cambiar esta

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

a este

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

Lo que tienes debe trabajar - ¿Seguro la Galería tiene contenidos visibles y que el navigmaske dibujable es un PNG con transparencia? –

+0

Sí, la galería es visible sin la superposición y estoy seguro de que el archivo PNG es transparente –

Respuesta

68

Android maneja la transparencia entre vistas y dibujos (incluidas imágenes PNG) de forma nativa, por lo que el escenario que describes (un ImageView parcialmente transparente frente a un Gallery) es ciertamente posible.

Si tiene problemas, puede estar relacionado con el diseño o su imagen. He replicado el diseño que describes y logré el efecto que buscabas. Aquí está el diseño exacto que utilicé.

<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> 

Tenga en cuenta que he cambiado el padre RelativeLayout a una altura y anchura de fill_parent como es generalmente lo que quiere para una actividad principal. Luego alineé la parte superior e inferior de la ImageView en la parte superior e inferior de la Gallery para asegurar que esté centrada frente a ella.

También establecí explícitamente el fondo de ImageView para que sea transparente.

En cuanto a la imagen dibujable en sí, si pones el archivo PNG en algún lugar para que lo mire puedo usarlo en mi proyecto y ver si es responsable.

+0

¡Agradable! Intenté configurar un fondo de ImageView para # 0000 (y @android: color/transparent) ... en vano. Si trato de desvanecerlo (alfa de 1.0 a 0.0) se desvanece a negro en lugar de desvanecerse a transparente. Esto está en Android 2.0. –

+3

A-ha! Estaba usando LinearLayout. Lo cambié a Relativo, luego puse el ImageView al final. Ahora el fundido "simplemente funciona" ... ¡yay! Gracias toneladas por el código/consejo. Eso me indicó como mi tonto. –

+2

Hola estoy usando la misma codificación de diseño xml, pero mi imagen transparente no se muestra. Muestra solo la pantalla en negro. Cualquier cosa que quiera agregar en mi código. – David

-2

Sí, eso es posible. El desafío, sin embargo, es hacer su diseño correctamente. La forma más fácil de hacerlo sería tener un AbsoluteLayout y luego colocar las dos imágenes donde desee que estén. No es necesario hacer nada especial para el png transparente, salvo que se lo agregue más tarde al diseño.

+15

AbsoluteLayout ahora está depreciado. Nadie debería usarlo más. – num1

1

La galería visible cambia la visibilidad, que es la forma de obtener la galería sobre la superposición de otra vista. la aplicación de muestra Home tiene algunos buenos ejemplos de esta técnica.

9

Además, eche un vistazo a FrameLayout, así es como la aplicación Galería de cámaras implementa la superposición de botones de Zoom.

+1

Siempre he optado por 'FrameLayout', que considero perfecto para tales fines. Sin embargo, recién ahora descubrí que antes de API 11, 'FrameLayout' no puede propagar la altura máxima medida a todos sus elementos secundarios, [consulte aquí] (http://stackoverflow.com/q/15780884/1856738). Por lo tanto, para soportar Android 2, uno tiene que usar 'RelativeLayout' a menos que uno vaya a una altura predeterminada. –

7

Si desea agregar una pantalla de superposición personalizada en Diseño, puede crear un Diseño lineal personalizado y obtener el control de los eventos de dibujo y clave. Puede mi tutorial- superposición en Android de Formato- http://prasanta-paul.blogspot.com/2010/08/overlay-on-android-layout.html

+0

Sin duda, un buen experimento, gracias por compartir el código. Pero esto simplemente se puede lograr con 'FrameLayout' a menos que su escenario específico se vea afectado por un error pre-API 11, [vea aquí] (http://stackoverflow.com/q/15780884/1856738), en cuyo caso usted todavía puede usa 'RelativeLayout'. –

0

Los simples camino cerca de es poner al margen -40dp el broche en la parte superior de la imageview

Cuestiones relacionadas