Necesitaba diseños redondeados de estilo iPhone, con un fondo gris detrás de ellos. (suspiro, siempre copiando el iPhone)
Estaba frustrado porque no pude encontrar una manera de enmascarar un diseño. La mayoría de las respuestas aquí dicen usar una imagen de fondo, pero esto no es lo que necesitaba.
Editar: respuesta anterior sugiere el uso de un FrameLayout
y ajuste de la dibujable android:foreground
. Esto introdujo un extraño relleno en la vista. He actualizado mi respuesta para usar la técnica más simple RelativeLayout
.
El truco es usar un RelativeLayout
; coloque su diseño dentro de él. Debajo de su diseño, agregue otro ImageView
, estableciendo su background
en un marco de imagen de enmascaramiento adecuado. Esto dibujará eso encima de tu otro diseño.
En mi caso, hice un archivo de 9Patch que era un fondo gris, con un rectángulo redondeado transparente cortado de él.

Esto crea la máscara perfecta para su diseño subyacente.
código XML es abajo - este es un archivo de diseño XML normales:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:layout_width="fill_parent">
<!-- this can be any layout that you want to mask -->
<LinearLayout android:id="@+id/mainLayout"
android:layout_height="wrap_content"
android:layout_width="fill_parent" android:orientation="vertical"
android:background="@android:color/white">
<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_gravity="center"
android:text="Random text..." />
</LinearLayout>
<!-- FRAME TO MASK UNDERLYING VIEW -->
<ImageView android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:background="@drawable/grey_frame"
android:layout_alignTop="@+id/mainLayout"
android:layout_alignBottom="@+id/mainLayout" />
</RelativeLayout>
Nota del ImageView
en la parte inferior, alineado superior & inferior a la disposición principal, con el conjunto de imágenes de enmascaramiento:
android:background="@drawable/grey_frame"
Esto hace referencia a mi archivo 9Patch - máscaras y el diseño subyacente al ser dibujado en primer plano.
Aquí hay un ejemplo que muestra las esquinas redondeadas grises en un diseño estándar.

hth
Supongo que se resolverá con el uso inteligente de relleno y márgenes – schwiz