web-dev-qa-db-fra.com

Comment créer une forme de bague pouvant être dessinée dans Android?

avec ce code je reçois juste une bordure:

<shape
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="ring"
    Android:innerRadius="15dp"
    Android:thickness="2dp"
    Android:useLevel="false">
    <solid Android:color="#4d4d4d" />

</shape> 

comment puis-je créer une forme de bague comme ci-dessous:

enter image description here

22
S.M_Emamian

Bague extérieure 2dp avec un écart de 2dp:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:top="4dp"
        Android:right="4dp"
        Android:bottom="4dp"
        Android:left="4dp">
        <shape
            Android:shape="oval">
            <solid Android:color="#4d4d4d" />
        </shape>
    </item>
    <item>
        <shape
            Android:shape="oval">
            <stroke Android:width="2dp"
                Android:color="#4d4d4d"/>
        </shape>
    </item>
</layer-list>
39
tachyonflux

Ring drawable est une juxtaposition d'éléments, utilisez layer-list

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <item Android:right="6dip" Android:left="6dip">
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
           Android:innerRadius="0dp"
           Android:shape="ring"
           Android:thicknessRatio="3"
           Android:useLevel="false" >
      <solid Android:color="@Android:color/transparent" />
      <stroke
          Android:width="5dp"
          Android:color="@color/maroon" />
    </shape>
  </item>
  <item Android:right="20dip"
        Android:left="20dip"
        Android:bottom="0dip"
        Android:top="34dip">
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
           Android:shape="rectangle"
           Android:innerRadius="0dp">
      <solid Android:color="@color/maroon" />
      <stroke Android:width="1dip" Android:color="@Android:color/transparent" />
    </shape>
  </item>
  <item Android:right="20dip"
        Android:left="20dip"
        Android:bottom="34dip"
        Android:top="0dip">
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
           Android:shape="rectangle"
           Android:innerRadius="0dp">
      <solid Android:color="@color/maroon" />
      <stroke Android:width="1dip" Android:color="@Android:color/transparent" />
    </shape>
  </item>
</layer-list>

enter image description here

XML pouvant être dessiné par tous les moyens plus utiles que les images statiques, elles peuvent être correctement mises à l'échelle sans qu'il soit nécessaire d'utiliser une bibliothèque .9 ou de générer un ensemble de tailles différentes à partir de Gimp, Photoshop

3
Sigrlami

<item>
    <shape
        Android:innerRadiusRatio="4"
        Android:shape="ring"
        Android:thicknessRatio="15"
        Android:useLevel="false" >
        <solid Android:color="@color/white_color" />
        <size
            Android:height="48dip"
            Android:width="48dip" />
    </shape>

</item>
<item>
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:shape="ring"
        Android:innerRadius="0dp"
        Android:thickness="55dp"
        Android:useLevel="false">
        <solid Android:color="@color/white_color"/>
        <size Android:height="200dp"
            Android:width="200dp"/>
        <stroke Android:color="@color/green_color" Android:width="5dp"/>
    </shape>
</item>

1
Sidhu Gaikwad

Je pense que l’utilisation d’une forme dans Android est préférable à une forme dans Photoshop.

Correct, créer un dessin est préférable car vous pouvez changer la couleur ou la forme avec du code au lieu de créer une nouvelle ressource image, par exemple . Créez une FrameLayout avec 2 Views et une TextView. Le premier fond de vue serait votre anneau extérieur (forme) et le second un cercle limé (forme). Enfin, la dernière View (plus grand indice z) votre TextView:

<FrameLayout>
   <View/><!-- (outer ring)-->
   <View/><!-- (filed circle)-->
   <TextView/><!-- (text)-->
</FrameLayout>
1
GuilhE
<?xml version="1.0" encoding="utf-8"
    <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
        <item>
            <shape Android:innerRadius="10dp" Android:shape="ring" Android:thickness="2dp" Android:useLevel="false">
                <solid Android:color="#dfdfdf" />
            </shape>
        </item>
     </selector>
0
ashish