2013-07-16 13 views
13

Ich habe eine Form in der XML-Datei unten definiert, jetzt möchte ich programmgesteuert auf Volltonfarbe ändern.Wie erstellt man Form mit Solid, Ecke, Strich in Java Code?

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <solid android:color="#DFDFE0" /> 

    <corners 
     android:bottomLeftRadius="8dp" 
     android:bottomRightRadius="8dp" 
     android:topLeftRadius="8dp" 
     android:topRightRadius="8dp" /> 

    <stroke 
     android:width="3dp" 
     android:color="#2E3135" /> 

</shape> 

Ich denke, ich sollte eine Klasse haben, die ShapeDrawable erweitert und implementiert die OnDraw-Methode. Weiß jemand wie?

+1

Sie können den Quelltext von Resources.getDrawable (int resId) anzeigen, und Sie werden feststellen, dass der Shape-Tag auf GradientDrawable zeigt. – yugy

+0

@yugy Danke für deinen guten Vorschlag, das ist ein guter Weg, um diese Art von Problemen zu lösen. – srain

Antwort

20

Endlich habe ich es ausgearbeitet!

// prepare 
int strokeWidth = 5; // 5px not dp 
int roundRadius = 15; // 15px not dp 
int strokeColor = Color.parseColor("#2E3135"); 
int fillColor = Color.parseColor("#DFDFE0"); 

GradientDrawable gd = new GradientDrawable(); 
gd.setColor(fillColor); 
gd.setCornerRadius(roundRadius); 
gd.setStroke(strokeWidth, strokeColor); 
+1

Können Sie mir bitte sagen, wie man einen Kreis erstellt. –

2

ich bevorzuge Form in Form zu machen und Polsterung der inneren Form ... diese

Wie hinzuzufügen:

<?xml version="1.0" encoding="UTF-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="#2E3135" /> 
      <corners 
       android:bottomLeftRadius="8dp" 
       android:bottomRightRadius="8dp" 
       android:topLeftRadius="8dp" 
       android:topRightRadius="8dp" /> 
     </shape> 
    </item> 
    <item 
     android:bottom="3dp" 
     android:left="3dp" 
     android:right="3dp" 
     android:top="3dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#DFDFE0" /> 
      <corners 
       android:bottomLeftRadius="5dp" 
       android:bottomRightRadius="5dp" 
       android:topLeftRadius="5dp" 
       android:topRightRadius="5dp" /> 
     </shape> 
    </item> 
</layer-list> 

UPDATE: gefunden ich, dass die Ecken der inneren Form sollte für ein besseres Aussehen kleiner sein ... Für eine andere Proportionen müssen Sie testen, welche inneren Radius, äußeren Radius und Strichgröße (die Polsterung) für Ihre Lösung am besten ist