web-dev-qa-db-ja.com

Android -shapeタグのuseLevelの目的

Android shape xmlタグのuseLevel属性の目的は何ですか?これはレイヤーリストに関するものですが、重要ではありません。 docs から、 useLevelタグ:

ドローアブルのレベルがグラデーションの描画方法に影響するかどうかを示します。

したがって、次のxmlスニペットがある場合:

    <?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>

次に、useLevel = trueを指定すると、リングは無効になります。リングが表示されるにはfalseである必要があります。しかし、この属性の目的は何ですか?ドキュメントは明確ではありません。

26
j2emanue

ProgressBars用です。たとえば this Gist は、進捗状況のドローアブルとしてリング形状を使用します。

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>

あなたのレイアウトでは:

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

基本的に、useLevelは、ドローアブルを部分的に描画できるようにします。たとえば、「レベル」を設定できるメソッド ImageView.setImageLevel() があります。 25%進行しているので、リングドローアブルは1/4円として描画されます。そして ProgressBar.setProgress() は同じことを行い、ProgressBarに設定したドローアブルの「レベル」を更新します。

14
TalkLittle