2013-07-16 5 views
13

Ho una forma definita nel file xml qui sotto, ora voglio cambiare a tinta unita programmaticamente.Come creare una forma con solido, angolo, tratto nel codice Java?

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

Penso che dovrei avere una classe che estenda ShapeDrawable e implementa il metodo onDraw. Qualcuno sa come?

+1

È possibile visualizzare il codice sorgente di Resources.getDrawable (int resId) e si troverà che il tag Shape punta a GradientDrawable. – yugy

+0

@yugy Grazie per il tuo suggerimento, è un buon modo per risolvere questo tipo di problemi. – srain

risposta

20

Infine, ho lavorato fuori!

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

Per favore, dimmi come creare un cerchio. –

2

Io preferirei fare la figura di forma e di aggiungere imbottitura alla forma interna ...

Ti piace questa:

<?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: Ho trovato che gli angoli della forma interna dovrebbe essere più piccolo per un aspetto migliore ... Per proporzioni diverse è necessario verificare quale raggio interno, raggio esterno e dimensione del tratto (l'imbottitura) sono i migliori per la soluzione

Problemi correlati