J'ai cherché plus sur les sites Web et j'ai reçu de nombreuses suggestions comme ci-dessous
Changer l'arrière-plan avec un style personnalisé pour définir le rayon et le rembourrage des coins
Changer l'image donnée en Bitmap en décodant l'image et la fonctionnalité de recadrage en passant ce bitmap et cette largeur (cela prend plus de temps à charger)
J'ai vérifié le WhatsApp Chat history list and it has rounded corner images but its loaded with minimum time
.
Pourriez-vous s'il vous plaît me suggérer la meilleure façon de créer un modèle de liste avec des images arrondies comme dans WhatsApp?
Je m'attends à changer l'image avec un coin arrondi en définissant les détails du style dans la page xml . (la largeur et la hauteur de l'image sont de 60 dp, ma liste contenant également environ 60 éléments)
Références:
res/mylayout.xml:
<ImageView
Android:id="@+id/contactssnap"
Android:layout_width="50dp"
Android:layout_height="50dp"
Android:src="@drawable/contactssnap"
Android:background="@drawable/roundimage" />
res/drawable/roundimage.xml:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" >
<solid Android:color="#ffffffff" />
<stroke
Android:width="2dp"
Android:color="#90a4ae" />
<size
Android:height="50dp"
Android:width="50dp" />
<padding
Android:bottom="2dp"
Android:left="2dp"
Android:right="2dp"
Android:top="2dp" />
<corners Android:radius="100dp" />
</shape>
Remarque: pris en charge Android Version de 14 à 22
La réponse de sats est travaillée. Mais RoundedBitmapDrawable ne peut pas être appliqué à une ImageView avec scaleType: centerCrop.
Une mise à jour.
Si vous utilisez Android API au niveau 21. Nous avons ici une solution simple.
Tout d'abord, créez un dessin comme arrière-plan pour la vue d'image
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<corners Android:radius="8dp" />
<solid Android:color="@Android:color/white" />
<stroke
Android:width="1dp"
Android:color="@color/colorWhite" />
</shape>
Ensuite, changez la propriété setClipToOutline de ImageView en true. Et définissez le dessin arrondi comme arrière-plan d'ImageView.
C'est tout.
Dans ma démo, j'utilise cette méthode pour une vue d'image arrondie. Peut le trouver ici dialogue de cuberto
Mettez imageView dans CardView et définissez CornerRadius pour CardView
<Android.support.v7.widget.CardView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:cardCornerRadius="8dp"
app:cardElevation="0dp">
<ImageView
Android:id="@+id/imgTourismHr"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:scaleType="fitXY" />
</Android.support.v7.widget.CardView>
vous pouvez utiliser les API standard fournies par Google pour créer une ImageView circulaire.
ImageView imageView = (ImageView) findViewById(R.id.circleImageView);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap);
roundedBitmapDrawable.setCircular(true);
imageView.setImageDrawable(roundedBitmapDrawable);
Voir également https://www.youtube.com/watch?v=zVC-YAnDlgk
Voir l'image du rectangle arrondi avec bordure arrondie
Maintenant, pour Définir une image rectangulaire arrondie avec une bordure arrondie.
Vous pouvez simplement déclarer CardView dans CardView avec app: cardCornerRadius = "30dp", app: cardUseCompatPadding = "true", app: cardElevation = "0dp".
Voir le code Xml ci-dessous
<androidx.cardview.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="center"
app:cardCornerRadius="30dp"
app:cardUseCompatPadding="true"
app:cardElevation="0dp"
Android:layout_margin="5dp"
>
<ImageView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:src="@drawable/temp"
Android:scaleType="fitXY"
Android:layout_gravity="center"
/>
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
Solution rapide pour toute personne utilisant Glide pour charger des images réseau, qui utilise RequestOptions.circleCropTransform ():
Glide.with(context)
.load(imageUrl)
.apply(RequestOptions.circleCropTransform())
.into(object : CustomViewTarget<ImageView, Drawable>(imageView) {
override fun onLoadFailed(errorDrawable: Drawable?) {
}
override fun onResourceCleared(placeholder: Drawable?) {
}
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
imageView.setImageDrawable(resource)
}
})
Avez-vous vérifié la technique des 9 patchs dans Android?
Si vous essayez de créer quelque chose comme ce qui est des chats à bulles avec des coins arrondis, je vous suggère d'utiliser cette technique au lieu d'utiliser XML Bitmap Decoder.
voici un exemple: Link
selon cet exemple, vous pouvez utiliser 9 générateurs de correctifs pour créer vos propres formes personnalisées et images bitmap qui se redimensionnent automatiquement pour s'adapter au contenu de la vue et à la taille de l'écran. Les parties sélectionnées de l'image sont mises à l'échelle horizontalement ou verticalement à l'aide d'indicateurs dessinés dans l'image.