web-dev-qa-db-fra.com

Android - but de useLevel dans la balise shape

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.

26
j2emanue

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.

14
TalkLittle