J'ai constaté que les deux méthodes étaient très utiles pour trouver une solution fonctionnelle. Voici ma version composite, qui est indépendante des pixels et vous permet d'avoir des coins carrés avec le reste des coins ayant le même rayon (ce qui est le cas d'utilisation habituel). Merci aux deux solutions ci-dessus :
public static Bitmap getRoundedCornerBitmap(Context context, Bitmap input, int pixels, int w, int h, boolean squareTL, boolean squareTR, boolean squareBL, boolean squareBR) {
Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final float densityMultiplier = context.getResources().getDisplayMetrics().density;
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, w, h);
final RectF rectF = new RectF(rect);
// vérifiez que notre coin arrondi est mis à l'échelle de manière appropriée
final float roundPx = pixels * densityMultiplier;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
// dessiner des rectangles sur les coins que nous voulons être carrés
if (squareTL) {
canvas.drawRect(0, h / 2, w / 2, h, paint);
}
if (squareTR) {
canvas.drawRect(w / 2, h / 2, w, h, paint);
}
if (squareBL) {
canvas.drawRect(0, 0, w / 2, h / 2, paint);
}
if (squareBR) {
canvas.drawRect(w / 2, 0, w, h / 2, paint);
}
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(input, 0, 0, paint);
return output;
}
De plus, j'ai redéfini ImageView pour y insérer cela afin de pouvoir le définir dans xml. Vous voudrez peut-être ajouter une partie de la logique que l'appel super fait ici, mais je l'ai commentée car elle n'est pas utile dans mon cas.
@Override
protected void onDraw(Canvas canvas) {
//super.onDraw(canvas);
Drawable drawable = getDrawable();
Bitmap b = ((BitmapDrawable) drawable).getBitmap();
Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);
int w = getWidth(), h = getHeight();
Bitmap roundBitmap = CropImageView.getRoundedCornerBitmap(getContext(), bitmap, 10, w, h, true, false, true, false);
canvas.drawBitmap(roundBitmap, 0, 0, null);
}
J'espère que cela vous aidera!
0 votes
Cela pourrait être utile stackoverflow.com/questions/26850780/…
0 votes
Caché sous des réponses plus anciennes et plus compliquées se trouve ce que je pense devrait être maintenant la réponse acceptée : RoundedBitmapDrawable, ajoutée dans la révision 21 de la bibliothèque de support v4.
0 votes
Vous pouvez le faire de la manière la plus simple en utilisant simplement CardView avec une ImageView à l'intérieur - regardez l'exemple ici stackoverflow.com/a/41479670/4516797
0 votes
Cette bibliothèque est très utile.
0 votes
Vérifiez maintenant nous avons
ShapeableImageView
pour rendre l'imageView circulaire ou arrondie stackoverflow.com/a/61086632/76664423 votes
Material Design 1.2.0 a introduit ShapeableImageView Donc cela pourrait être utile.
0 votes
Utilisez ShapeableImageView de la bibliothèque de composants Material. Vérifiez cette réponse stackoverflow.com/a/61960983/1362418