Comment faire un afficher avec des coins arrondis?

Je suis en train de faire une vue sur android avec des bords arrondis. La solution que j'ai trouvé pour l'instant est de définir une forme avec des coins arrondis et de l'utiliser comme arrière-plan de ce point de vue.

Voici ce que j'ai fait, de définir un drawable comme indiqué ci-dessous:

<padding
android:top="2dp"
android:bottom="2dp"/>
<corners android:bottomRightRadius="20dp"
android:bottomLeftRadius="20dp"
android:topLeftRadius="20dp"
android:topRightRadius="20dp"/>

Maintenant, j'ai utilisé ce que le fond de ma mise en page comme ci-dessous:

<LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="10dp"
        android:clipChildren="true"
        android:background="@drawable/rounded_corner">

Cela fonctionne parfaitement bien, je peux voir que la vue a des bords arrondis.

Mais ma mise en page a obtenu de nombreuses autres vues enfant en elle, dire une ImageView ou un MapView. Quand je place un ImageView à l'intérieur de la disposition ci-dessus, les coins de l'image sont pas coupés/recadrée, au contraire, il semble complet.

J'ai vu d'autres solutions de contournement pour le faire fonctionner comme on l'a expliqué ici.

Mais est-il une méthode pour définir des coins arrondis pour une vue et de tous ses
enfant vues sont contenues à l'intérieur de cette fenêtre principale qui a arrondi
les coins?

  • Si vous utilisez une mise en page Personnalisée s'étendant à LinearLayout, et alors que son objet est créé, itérer tous les enfants de cet Agencement et l'appliquer aux bords arrondis arrière-plan pour eux?
  • android.de soutien.v7.widget de.CardView semblent être la solution pour cela
  • Cette solution résolu pour moi, mais nécessite de sous-classement: https://stackoverflow.com/questions/5574212/android-view-clipping
InformationsquelleAutor Zach | 2014-09-27