3

在 Android 中是否可以为 LevelListDrawable 提供一个空案例?“空”就像“没有图像”。例如,看看下面的 LevelListDrawable:

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >        
    <item
        android:drawable="@drawable/face_1"
        android:maxLevel="1" />
    <item
        android:drawable="@drawable/face_2"
        android:maxLevel="2" />
    <item
        android:drawable="@drawable/face_3"
        android:maxLevel="3" />
    <item
        android:drawable="@drawable/face_4"
        android:maxLevel="4" />
    <item
        android:drawable="@drawable/face_5"
        android:maxLevel="5" />
    <item
        android:drawable="@drawable/face_6"
        android:maxLevel="6" />
</level-list>

它是一个有 6 个面的骰子。我也想要一张空的脸。一个 NULL 案例,或类似的东西。

<?xml version="1.0" encoding="utf-8"?>
    <level-list xmlns:android="http://schemas.android.com/apk/res/android" >        
        <item
            android:drawable=""
            android:maxLevel="0" />
        <item
            android:drawable="@drawable/face_1"
            android:maxLevel="1" />
        <item
            android:drawable="@drawable/face_2"
            android:maxLevel="2" />
        <item
            android:drawable="@drawable/face_3"
            android:maxLevel="3" />
        <item
            android:drawable="@drawable/face_4"
            android:maxLevel="4" />
        <item
            android:drawable="@drawable/face_5"
            android:maxLevel="5" />
        <item
            android:drawable="@drawable/face_6"
            android:maxLevel="6" />
    </level-list>

目前我模拟这种行为是这样的:

ImageView image = new ImageView(context);
image.setImageDrawable(getResources().getDrawable(R.drawable.dice));
image.setImageLevel(3);
if(somethingHappened){
    image.setImageDrawable(null);
}

但在那之后我必须再打电话image.setImageDrawable(getResources().getDrawable(R.drawable.dice));而不是改变图像级别。谢谢你。

4

1 回答 1

2

minLevel默认情况0下,因此如果您想排除face_1显示以level=0显式添加它

<item
     android:drawable="@drawable/face_1"
     android:minLevel="1"
     android:maxLevel="1" />

问题是 nowface_2会显示出来(因为它是匹配的[0, 2]),但是如果你为每个具有相同值的所有面添加min和,它们会很好地发挥作用。max

查看android.graphics.drawable.LevelListDrawable.LevelListState#indexOfLevel更多。

或者,我在某处看到了一个神奇的价值:

<item
    android:drawable="@null"
    android:maxLevel="0" />

但这可能会从以下位置引发 NPE 或异常LevelListDrawable#inflate

<item> 标签需要一个 'drawable' 属性或定义可绘制对象的子标签

于 2016-01-18T16:45:12.993 回答