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である必要があります。しかし、この属性の目的は何ですか?ドキュメントは明確ではありません。
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に設定したドローアブルの「レベル」を更新します。