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
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?
2 réponses
C'est une nouvelle solution:
RoundedBitmapDrawable RBD = RoundedBitmapDrawableFactory.create(mContext.getResources(),YourBitmap);
RBD.setCornerRadius(20);
RBD.setAntiAlias(true);
wholeRel.setBackground(RBD);
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.