2010-10-30 14 views
33

Attualmente sto disegnando un numero di cerchi su un'area di disegno in una vista personalizzata nel codice. i cerchi sono statici e non cambiano. Mi piacerebbe disegnarli usando ShapeDrawable in xml per aiutare a ripulire il mio codice. Avrò un numero di diversi drawable che l'utente può selezionare e quindi non voglio farlo in codice. avere 3 o 4 drawable xml mi sembra molto più ordinato.Disegno di più forme con ShapeDrawable in xml con Android

Ho creato un cerchio in xml utilizzando ShapeDrawable ma non riesco ad aggiungere più di una forma al xml.

Come si aggiungono più forme a un documento XML utilizzando ShapeDrawable.

risposta

33

Penso di aver trovato una soluzione per aggiungere più forme al mio file xml usando Layer-list. Non ho ancora provato questo, ma questo sembra essere esattamente quello che voglio in quanto le forme saranno disegnate nell'ordine del loro indice di array.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
     <solid android:color="#FFF8F8F8" /> 
     </shape> 
    </item> 
    <item android:top="23px"> 
     <shape> 
     <solid android:color="#FFE7E7E8" /> 
     </shape> 
    </item> 
</layer-list> 

Blog post

Android docs

63

Ecco come ho fatto un cerchio rosso pieno di un bordo nero di un pixel, con un numero bianco 72 al centro:

creare un file XML in res \ drawable e nominarlo in modo appropriato, ad esempio red_circle_black_border.xml

<?xml version="1.0" encoding="UTF-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="oval"> 
      <solid android:color="@android:color/black" /> 
     </shape> 
    </item> 
    <item android:top="1dp" android:left="1dp" android:right="1dp" android:bottom="1dp"> 
     <shape android:shape="oval"> 
      <solid android:color="@android:color/red" /> 
     </shape> 
    </item> 
</layer-list> 

Quindi, per usarlo nel layout, dichiareremo come segue:

<TextView 
    android:text="72" 
    android:textSize="14dp" 
    android:textStyle="bold" 
    android:background="@drawable/red_circle_black_border" 
    android:layout_width="22dp" 
    android:layout_height="22dp" 
    android:gravity="center_vertical|center_horizontal" 
    android:textColor="@android:color/white" /> 

Ovviamente, cambiare il textSize e layout_width/altezza come richiesto :-)

+0

Presumo è possibile utilizzare un imageview se avete nessun testo da mostrare? – skyfoot

+2

Sicuro. In effetti è solo un drawable ora, quindi usalo come un'immagine. –

Problemi correlati