Quel est le but de l'attribut useLevel de la balise xml shape Android? Cela concerne une liste de couches, mais cela ne devrait pas avoir d'importance. À partir de docs j'ai trouvé le sens de la balise useLevel:
Indique si le niveau du dessinable affecte la façon dont le dégradé est dessiné.
Donc, si j'ai l'extrait de code XML suivant:
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="ring"
Android:innerRadius="15dp"
Android:thickness="10dp"
Android:useLevel="false">
<solid Android:color="#ababf2" />
<size
Android:height="50dp"
Android:width="50dp" />
</shape>
puis avec useLevel = true, l'anneau est désactivé. Il doit être faux pour que l'anneau apparaisse. Mais quel est le but de cet attribut? Les documents ne sont pas clairs.
C'est pour ProgressBars. Par exemple ce Gist utilise une forme d'anneau comme dessin de progression.
res/drawable/github_232_circular.xml:
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:innerRadiusRatio="2.3"
Android:shape="ring"
Android:thickness="3.8sp"
Android:useLevel="true">
<solid Android:color="#ff0000" />
</shape>
Dans votre mise en page:
<ProgressBar
Android:id="@+id/progress"
style="?android:attr/progressBarStyleHorizontal"
Android:layout_width="64dp"
Android:layout_height="64dp"
Android:layout_gravity="top|end"
Android:max="100"
Android:progress="0"
Android:progressDrawable="@drawable/github_232_circular"
/>
Fondamentalement, useLevel
permet de dessiner partiellement le dessinable. Par exemple, il existe une méthode ImageView.setImageLevel () qui vous permet de définir un "niveau", par exemple 25% de progression, donc l'anneau à dessiner serait dessiné en quart de cercle. Et ProgressBar.setProgress () fait la même chose, en mettant à jour le "niveau" du dessin que vous avez défini sur le ProgressBar.