2010-10-30 31 views
33

Je dessine actuellement un certain nombre de cercles sur une toile dans une vue personnalisée dans le code. les cercles sont statiques et ne changent pas. Je voudrais les dessiner en utilisant un ShapeDrawable en XML pour aider à nettoyer mon code. Je vais avoir un certain nombre de drawables différents que l'utilisateur peut sélectionner et donc je ne veux pas le faire dans le code. avoir 3 ou 4 xml drawables me semble beaucoup plus propre.Dessiner plusieurs formes avec ShapeDrawable en xml avec Android

J'ai créé un cercle en XML à l'aide d'un ShapeDrawable mais je ne peux pas ajouter plus d'une forme au xml. Comment ajouter plusieurs formes à un document XML à l'aide de ShapeDrawable.

Répondre

33

Je pense avoir trouvé une solution pour ajouter plusieurs formes à mon fichier xml en utilisant Layer-list. Je n'ai pas encore essayé cela mais cela semble être exactement ce que je veux car les formes seront dessinées dans l'ordre de leur index de tableau.

<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

Voilà comment je l'ai fait un cercle rouge rempli d'une bordure noire d'un pixel, avec un nombre blanc 72 au milieu:

Créer un fichier XML dans res \ drawable et nommez-le de manière appropriée, par exemple 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> 

Ensuite, pour l'utiliser dans votre mise en page, déclarer comme suit:

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

De toute évidence, changer le textSize et layout_width/hauteur nécessaire :-)

+0

Je suppose que vous pouvez utiliser un imageview si vous avez pas de texte à afficher? – skyfoot

+2

Bien sûr. Il est en effet juste un dessinable maintenant, alors utilisez-le comme une image. –