wake-up-neo.com

Programmierbare ovale Form mit Rand (Eckenradius) auf Android

Ich versuche, benutzerdefinierte ShapeDrawable mit OvalShape zu zeichnen, gefüllt mit weißem und grauem Rand. Ich habe so ein Zeichen erstellt:

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);

Aber das Ergebnis war: Ecken Problem

enter image description here

Die Idee ist programmgesteuert, eine Form mit unterschiedlichen Farben zu erstellen:

<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>

Wie kann das behoben werden?

28
L3K0V

dies ist eine neue Lösung:

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

            wholeRel.setBackground(RBD);
1
babak

Ich habe einen Weg gefunden, neue Zeichensätze zu erstellen!

Ein definierter Kreis mit Rand aus Android XML wie folgt:

<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>

Wenn dann die Zeichenfarbe geändert werden soll, wende ich ColorFilter an. Wenn ich zum Beispiel die rote Farbe von drawable in blau ändern möchte, mache ich Folgendes:

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

Wenn Sie StateListDrawable zum Erstellen von benutzerdefinierten Selektoren aus Code verwenden möchten, beachten Sie Folgendes: StateListDrawable löscht die auf Zeichnungsfilter angewendeten Filter ... Wenden Sie den Filter auf den gesamten Selektor an, indem Sie selector.setColorFilter... das Problem beheben.

44
L3K0V