Android -使用形状标记中的Level属性的目的

31
android shape xml标签中的useLevel属性的目的是什么?这是关于layer-list的,但不应该有影响。从文档中找到了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才能显示环形菜单。但是这个属性的目的是什么?文档没有明确说明。


1
文档不清楚 - 就像这在 Android 上从未发生过一样,对吧? :) - Marcin Orlowski
文档的这一部分(http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape)在<gradient>元素上有一个“android:useLevel”的描述,如果用作LevelListDrawable,则为“true”。LevelListDrawable肯定具有级别的概念。话虽如此,我不理解这里的关系。 - CommonsWare
1个回答

23

这是用于进度条的内容。例如, 这个代码片段 使用环形作为进度绘制。

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% 进度,因此环形可绘制对象将被绘制为四分之一圆。而ProgressBar.setProgress() 同样可以做到这一点,更新你在 ProgressBar 上设置的可绘制对象的“级别”。


那么你的意思是useLevel使进度条变成圆形的吗?我还是不太明白你的意思,因为你提供的形状已经是一个环了。 - j2emanue
1
useLevel 使得可绘制对象可以被部分绘制。例如,有一个方法 ImageView.setImageLevel() 可以让你设置一个“级别”,比如 25% 的进度,这样环形可绘制对象就会被绘制成一个四分之一的圆弧。而 ProgressBar 在使用 ProgressBar.setProgress() 时会设置可绘制对象的“级别”。我将在我的答案中更新这个额外的细节。 - TalkLittle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接