2013-03-06 7 views
26

Ich versuche, benutzerdefinierte ShapeDrawable mit OvalShape, gefüllt mit weißen und mit grauen Rahmen zu zeichnen. Ich habe ein ziehbar wie folgt aus:Zeichnung programmgesteuert ovale Form mit Rahmen (Eckenradius) auf Android

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 davon war: corners problem

enter image description here

Die Idee ist programmatisch eine Form wie diese zu schaffen, sondern mit verschiedenen Farben:

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

+0

Sie sagen, dass das Problem der Ausschnitt der Grenze in diesem verknüpften Bild gezeigt ist? –

+0

Ja! Es gibt kein Problem, wenn die Strichstärke 0 ist (Haarstrich), aber keine Lösung für mich. Die Methode getPixels() gibt Pixel für gegebenes Dip übrigens zurück ... aber ich denke, das ist nicht das Problem. – L3K0V

+0

Ich denke, das Problem ist die Größe Ihres Zeichens. Sie müssen die Größe so verringern, dass sie der Breite des Rahmens entspricht. –

Antwort

1

dies ist eine neue Lösung:

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

      wholeRel.setBackground(RBD); 
42

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

A definiert einen Kreis mit Grenze von 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> 

dann, wenn ein Mangel ziehbar Farbe zu ändern, ich bin Anwendung Colorfilter. Zum Beispiel, wenn ich will ziehbar rote Farbe blau ich dies tun ändern:

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

Wenn wir StateListDrawable verwenden für das Erstellen von benutzerdefinierten Selektoren aus dem Code beachten Sie wollen - StateListDrawable auf Drawables Filter angewendet löscht ... Filter anwenden auf ganze Selektor von selector.setColorFilter... beheben Sie das Problem.

+0

Ich bin auf ein Problem: es ist nicht möglich, zu tun 'LinearLayout.addView (Zeichen, neue LinearLayout.LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f));' –

+0

Sie versuchen, zu Layout anstelle von Ansicht zu zeichnen ... Erstellen Sie eine Bildansicht oder Bildschaltfläche und dann festlegen ziehbar zu der Ansicht vor fügen Sie es dem Layout hinzu und natürlich fügen Sie dem Layout hinzu. – L3K0V

+0

Wissen Sie, wie ich die Hintergrundfarbe programmgesteuert ändern könnte? –

Verwandte Themen