2010-10-30 10 views
33

Ich zeichne derzeit eine Reihe von Kreisen auf einer Leinwand in einer benutzerdefinierten Ansicht in Code. Die Kreise sind statisch und ändern sich nicht. Ich möchte sie mit einem ShapeDrawable in XML zeichnen, um meinen Code zu bereinigen. Ich werde eine Anzahl von verschiedenen Zeichen haben, die der Benutzer auswählen kann und deshalb möchte ich das nicht im Code machen. 3 oder 4 xml drawables zu haben, scheint mir viel besser zu sein.Zeichnen von mehreren Formen mit ShapeDrawable in Xml mit Android

Ich habe einen Kreis in xml mit einem ShapeDrawable erstellt, kann aber dem xml nicht mehr als eine Form hinzufügen.

Wie füge ich mehrere Formen zu einem XML-Dokument mit ShapeDrawable.

Antwort

33

Ich denke, ich habe eine Lösung gefunden, um mehrere Formen zu meiner XML-Datei mit Layer-Liste hinzuzufügen. Ich habe dies noch nicht versucht, aber das scheint genau das zu sein, was ich will, da die Formen in der Reihenfolge ihres Array-Index gezeichnet werden.

<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

Hier ist, wie ich einen gefüllten roten Kreis mit einem schwarzen Rand, mit einer weißen Nummer 72 in der Mitte von einem Pixel tat:

Erstellen Sie eine XML-Datei in res \ drawable und benennen Sie es entsprechend, zB 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> 

Dann ist es in Ihrem Layout zu verwenden, ist es zu erklären, wie folgt: Offensichtlich

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

, die textsize und Sie einen Imageview verwenden können ich davon ausgehen :-)

+0

nach Bedarf layout_width/Höhe ändern, wenn Sie kein Text zu zeigen? – skyfoot

+2

Sicher. Es ist jetzt nur noch ein Zeichen, also benutze es wie ein Bild. –