Dessin de forme ovale par programme avec bordure (rayon d'angle) sur Android

J'essaie de dessiner un ShapeDrawable personnalisé avec OvalShape, rempli de blanc et de bordure grise. J'ai créé un drawable comme ceci:

ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
drawable.getPaint().setColor(Color.GRAY);
drawable.getPaint().setStyle(Style.STROKE);
drawable.getPaint().setStrokeWidth(getPixels(5));
drawable.getPaint().setAntiAlias(true);

, Mais le résultat fut: coins problème

entrez la description de l'image ici

L'idée est par programmation de créer une forme comme celle-ci mais avec des couleurs différentes:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval">
<corners android:radius="10dip"/>
<stroke android:color="#FF0000" android:width="5dip"/>
<solid android:color="@android:color/transparent"/>
</shape>

Comment peut peut être résoudre ce problème?

28
demandé sur kjhughes 2013-03-06 16:45:58

2 réponses

C'est une nouvelle solution:

 RoundedBitmapDrawable RBD = RoundedBitmapDrawableFactory.create(mContext.getResources(),YourBitmap);
            RBD.setCornerRadius(20);
            RBD.setAntiAlias(true);

            wholeRel.setBackground(RBD);
1
répondu babak 2017-12-12 23:24:14

J'ai trouvé un moyen de contourner la création de nouveaux drawables!

A défini un cercle avec une bordure à partir d'android XML comme suit:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval">
<corners android:radius="10dip"/>
<stroke android:color="#FF0000" android:width="5dip"/>
<solid android:color="@android:color/transparent"/>
</shape>

Ensuite, quand vous voulez changer la couleur drawable, j'applique ColorFilter. Par exemple, si je veux changer la couleur rouge de drawable en bleu, je fais ceci:

Drawable drawable = context.getResources().getDrawable(R.drawable.name);
drawable.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);

Si nous voulons utiliser StateListDrawable pour créer des sélecteurs personnalisés à partir du code, soyez conscient - statelistdrawable efface appliqué aux filtres drawables... appliquer le filtre sur le sélecteur entier par selector.setColorFilter... fix problème.

44
répondu L3K0V 2014-11-16 23:58:03