J'essaie de créer un cercle avec seulement une bordure à l'aide de XML dans Android:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="oval" >
<stroke Android:width="1dp"
Android:color="#000000"/>
</shape>
Le code que j'ai utilisé est affiché ci-dessus. Cependant, je reçois un disque solide et pas une bague. Je voudrais obtenir la sortie en utilisant simplement XML et non canvas. Qu'est-ce que je fais mal?
Merci.
EDIT: Cela a fonctionné grâce à la réponse ci-dessous. Heres mon code final:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:innerRadius="0dp"
Android:shape="ring"
Android:thicknessRatio="1.9"
Android:useLevel="false" >
<solid Android:color="@Android:color/transparent" />
<size Android:width="100dp"
Android:height="100dp"/>
<stroke Android:width="1dp"
Android:color="#FFFFFF"/>
</shape>
Essayez quelque chose comme ça
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:innerRadius="0dp"
Android:shape="ring"
Android:thicknessRatio="2"
Android:useLevel="false" >
<solid Android:color="@Android:color/transparent" />
<stroke
Android:width="2dp"
Android:color="@Android:color/darker_gray" />
</shape>
Mise à jour: fait Android:thicknessRatio="2"
pour donner le cercle complet (avec Nexus 5 - Lollipop)
utilise ça ça va marcher
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="oval" >
<gradient
Android:centerX=".6"
Android:centerY=".40"
Android:endColor="@Android:color/transparent"
Android:gradientRadius="20"
Android:startColor="@Android:color/transparent"
Android:type="radial" />
<stroke
Android:width="1dp"
Android:color="#FFFFFF" />
<size
Android:height="100dp"
Android:width="100dp" />
</shape>
Creux
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="oval">
<stroke
Android:width="1dp"
Android:color="@color/indicator_unselected" />
</shape>
Plein
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="oval">
<corners Android:radius="100dp" />
<solid Android:color="@Android:color/white" />
</shape>
Si vous pouvez utiliser Vector drawables, essayez ceci
<vector Android:height="24dp" Android:viewportHeight="512.0"
Android:viewportWidth="512.0" Android:width="24dp" xmlns:Android="http://schemas.Android.com/apk/res/Android">
<path Android:fillColor="#FFFFFF" Android:fillType="evenOdd"
Android:pathData="M0,0L512,0L512,512L0,512L0,0ZM256,511C396.8,511 511,396.8 511,256C511,115.2 396.8,1 256,1C115.2,1 1,115.2 1,256C1,396.8 115.2,511 256,511Z"
Android:strokeColor="#00000000" Android:strokeWidth="1"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:tools="http://schemas.Android.com/tools"
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="oval" >
<stroke
Android:width="4dp"
Android:color="@color/colorPrimaryDark" />
<corners Android:radius="0dp" />
</shape>
</item>
<item
Android:top="1dp"
Android:bottom="1dp"
Android:left="1dp"
Android:right="1dp">
<shape Android:shape="oval">
<solid Android:color="@color/colorRed" />
<size Android:height="@dimen/_100sdp"
Android:width="@dimen/_100sdp"></size>
</shape>
</item>
</layer-list>
Vous pouvez utiliser la valeur intégrée d'Android pour transparente en tant que @Android:color/transparent
ou utiliser #0000
ou #00000000
pour commencer ci-dessus pour 4 chiffres, le premier correspond à alpha et dans la valeur à 8 chiffres, les deux premiers chiffres correspondent à alpha.
Lorsque vous n'indiquez que 3 ou 6 chiffres de couleur par rapport à la valeur alpha par défaut, il vous suffit de passer à 4 ou 8 chiffres pour définir cette valeur alpha
Si vous définissez la couleur sur #00000000
, le résultat sera transparent. Vous voudriez le faire de cette façon si vous vouliez le changer dans le futur du développement. Si vous vouliez que ce soit rouge et partiellement transparent par exemple, ce serait #ff000088
Les deux derniers chiffres sont l'opacité . Je le fais de cette façon pour faciliter les modifications futures.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="oval" >
<gradient
Android:endColor="@Android:color/transparent"
Android:gradientRadius="20"
Android:startColor="@Android:color/transparent" />
<stroke
Android:width="1dp"
Android:color="#d9d9d9" />
<size
Android:height="100dp"
Android:width="100dp" />
</shape>
</item>
<item
Android:bottom="1dp"
Android:left="1dp"
Android:right="1dp"
Android:top="1dp">
<shape Android:shape="oval" >
<gradient
Android:endColor="@Android:color/transparent"
Android:gradientRadius="20"
Android:startColor="@Android:color/transparent" />
<stroke
Android:width="1dp"
Android:color="#b3b3b3" />
<size
Android:height="100dp"
Android:width="100dp" />
</shape>
</item>
</layer-list>
L'effet de trait peut être obtenu en dessinant un ovale transparent Avec le trait d'une couleur requise (# 000 dans l'exemple):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="oval">
<solid Android:color="@Android:color/transparent" />
<stroke
Android:width="1dp"
Android:color="#000" />
<size
Android:width="40dp"
Android:height="40dp" />
</shape>