J'essaie de faire une vue sous Android avec des bords arrondis. La solution que j'ai trouvée jusqu'à présent est de définir une forme avec des coins arrondis et de l'utiliser comme arrière-plan de cette vue.
Voici ce que j'ai fait, définir un dessinable 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, je l'ai utilisé comme arrière-plan pour 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 contient de nombreuses autres vues enfants, par exemple un ImageView ou un fichier MapView
. Lorsque je place un ImageView
à l'intérieur de la mise en page ci-dessus, les coins de l'image ne sont pas coupés / rognés, mais semblent pleins.
J'ai vu d'autres solutions de contournement pour le faire fonctionner comme celui expliqué ici .
Mais existe-t-il une méthode pour définir des coins arrondis pour une vue et toutes ses vues enfants sont contenues dans cette vue principale qui a des coins arrondis?
Réponses:
Une autre approche consiste à créer une classe de mise en page personnalisée comme celle ci-dessous. Cette mise en page dessine d'abord son contenu sur un bitmap hors écran, masque le bitmap hors écran avec un rect arrondi, puis dessine le bitmap hors écran sur le canevas réel.
Je l'ai essayé et cela semble fonctionner (du moins pour mon cas de test simple). Cela affectera bien sûr les performances par rapport à une mise en page classique.
Utilisez ceci comme une mise en page normale:
la source
Ou vous pouvez utiliser un
android.support.v7.widget.CardView
comme ceci:la source
shape.xml
et à l'intérieur de votre mise en page
la source
La réponse de Jaap van Hengstum fonctionne très bien mais je pense que c'est cher et si nous appliquons cette méthode sur un Button par exemple, l'effet tactile est perdu car la vue est rendue sous forme de bitmap.
Pour moi la meilleure méthode et la plus simple consiste à appliquer un masque sur la vue, comme ça:
la source
Si vous rencontrez des problèmes lors de l'ajout d'écouteurs tactiles à la mise en page. Utilisez cette mise en page comme mise en page parent.
comme
la source
Créez un fichier xml appelé
round.xml
dans ledrawable
dossier et collez ce contenu:puis utilisez le
round.xml
commebackground
pour n'importe quel élément. Ensuite, cela vous donnera des coins arrondis.la source
Dans Android L, vous pourrez simplement utiliser View.setClipToOutline pour obtenir cet effet. Dans les versions précédentes, il n'y avait aucun moyen de découper simplement le contenu d'un ViewGroup aléatoire dans une certaine forme.
Vous devrez penser à quelque chose qui vous donnerait un effet similaire:
Si vous n'avez besoin que de coins arrondis dans ImageView, vous pouvez utiliser un shader pour «peindre» l'image sur la forme que vous utilisez comme arrière-plan. Jetez un œil à cette bibliothèque pour un exemple.
Si vous avez vraiment besoin que tous les enfants soient coupés, peut-être pouvez-vous avoir une autre vue sur votre mise en page? Un avec un arrière-plan de la couleur que vous utilisez et un «trou» rond au milieu? Vous pouvez en fait créer un ViewGroup personnalisé qui dessine cette forme sur tous les enfants remplaçant la méthode onDraw.
la source
suivez ce tutoriel et toute la discussion ci-dessous - http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/
selon ce billet rédigé par Guy Romain, l'un des principaux développeurs de l'ensemble de la boîte à outils de l'interface utilisateur Android, il est possible de faire un conteneur (et toutes ses vues enfant) avec des coins arrondis, mais il a expliqué que c'était trop cher (à partir de performances de problèmes de rendu).
Je vous recommanderai d'aller selon son post, et si vous voulez des coins arrondis, alors mettez en place des coins arrondis
ImageView
fonction de cet article. ensuite, vous pouvez le placer dans un conteneur avec n'importe quel arrière-plan, et vous obtiendrez l'effet que vous souhaitez.c'est ce que j'ai fait aussi finalement.
la source
Vous pouvez utiliser un
androidx.cardview.widget.CardView
comme ceci:OU
shape.xml
et à l'intérieur de votre mise en page
la source
Créez un fichier xml sous votre dossier dessinable avec le code suivant. (Le nom du fichier que j'ai créé est arrondi_corner.xml)
arrondi_corner.xml
Et gardez cela
drawable
commebackground
pour la vue sur laquelle vous souhaitez conserver la bordure d'angle arrondie. Gardons-le pour unLinearLayout
la source
Cela a
CardView
fonctionné pour moi dans l'API 27 dans Android Studio 3.0.1. Le acolorPrimary
été référencé dans leres/values/colors.xml
fichier et n'est qu'un exemple. Pour la layout_width de0dp
celui-ci s'étendra à la largeur du parent. Vous devrez configurer les contraintes et la largeur / hauteur selon vos besoins.la source
Différence avec la réponse de Jaap van Hengstum:
la source
la source
Avec la bibliothèque de composants de matériaux, la meilleure façon de créer
View
des coins arrondis est d'utiliser leMaterialShapeDrawable
.Créez un ShapeAppearanceModel avec des coins arrondis personnalisés:
Créez un
MaterialShapeDrawable
:Si vous souhaitez appliquer également une elevationOverlay pour le thème sombre, utilisez ceci:
Facultatif: appliquer à la forme Dessiner une couleur d'arrière-plan et un contour
Enfin, appliquez le shapeDrawable comme arrière-plan dans votre
LinearLayout
(ou une autre vue):la source
Le lien du didacticiel que vous avez fourni semble suggérer que vous devez définir les propriétés layout_width et layout_height de vos éléments enfants sur match_parent.
la source
essayez cette propriété avec votre mise en page linéaire, cela vous aidera
tools: context = ". youractivity"
la source
la source
Pour créer une image d'angle arrondi à l'aide de com.google.android.material: material: 1.2.0-beta01
ou si vous souhaitez l'utiliser dans un fichier xml:
dans style.xml, ajoutez ceci:
la source
Utilisez la forme en xml avec rectangle, définissez la propriété du rayon inférieur ou supérieur comme vous le souhaitez, puis appliquez ce xml comme arrière-plan à votre vue .... ou ... utilisez des dégradés pour le faire à partir du code.
la source