Android -形状标签中useLevel的用途

Android -purpose of useLevel in shape tag

android 形状 xml 标签 useLevel 属性的用途是什么?这是关于图层列表的,但应该无关紧要。 从 docs 我找到了 useLevel 标签的含义:

Indicates whether the drawable's level affects the way the gradient is drawn.

所以如果我有以下 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,环被禁用。戒指出现一定是假的。但是这个属性的目的是什么?文档不清楚。

用于进度条。例如 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 使 drawable 可以部分绘制。例如,有一个方法 ImageView.setImageLevel() that lets you set a "level," e.g. 25% progress, so the ring drawable would be drawn as a quarter-circle. And ProgressBar.setProgress() 做同样的事情,更新您在 ProgressBar 上设置的可绘制对象的 "level"。