level-list

应用场景:当一个ImageView根据不同的值显示不同的样式时,在代码中我们可能会用到多个 if-else 或者是 switch 来动态显示
if (condition1){   
        image.setBackground(R.id.xxx1);   
}else if (condition2){   
        image.setBackground(R.id.xxx2);   
}  

……


这时,我们完全可以考虑用level-list.下面是一个level-list的文件 level_list_demo.xml:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:drawable="@drawable/icon_0"
        android:maxLevel="20"
        android:minLevel="0"/>
    <item
        android:drawable="@drawable/icon_20"
        android:maxLevel="40"
        android:minLevel="21"/>
    <item
        android:drawable="@drawable/icon_40"
        android:maxLevel="60"
        android:minLevel="41"/>
    <item
        android:drawable="@drawable/icon_60"
        android:maxLevel="80"
        android:minLevel="61"/>
    <item
        android:drawable="@drawable/icon_80"
        android:maxLevel="99"
        android:minLevel="81"/>
    <item
        android:drawable="@drawable/icon_100"
        android:maxLevel="100"/>

</level-list>

ImageView控件使用时只需要引用即可:

< ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/level_list_demo" />

我们在java代码中调用
imageView.setImageLevel(value);
value的值在上面哪一个范围内,那么imageview就显示对应范围下的图片。
注意事项:
  • 使用ImageView的src设置成已创建好的xml文件。 
  • 默认的level为0,如果没有和0匹配的level,那么就不显示。
  • level匹配以maxLevel优先。即如果有个item,min:1,max:2。   另一份item,min:2,max:3。如果此时设置level=2,那么会匹配第一个item。
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:maxLevel="1" android:drawable="@drawable/image1" />
  <item android:maxLevel="2" android:drawable="@drawable/image2" />
  <item android:maxLevel="3" android:drawable="@drawable/image3" />
  <item android:maxLevel="4" android:drawable="@drawable/image4" />
  <item android:maxLevel="5" android:drawable="@drawable/image5" />
</level-list>



level-list 是 Android 中的一个 Drawable 类型,可以根据不同的 level 值来显示不同的 drawable。通常,我们可以通过在 XML 中定义 level-list,来实现根据不同的状态切换不同的 drawable。 以下是一个 level-list 的例子: ```xml <level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_0" /> <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_1" /> <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_2" /> <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_3" /> </level-list> ``` 在上面的例子中,我们定义了一个 level-list,其中包含了四个 item,每个 item 分别对应了不同的 drawable,并通过设置 maxLevel 属性来指定了当前 drawable 对应的 level 值。 在代码中,我们可以通过调用 setLevel() 方法来设置当前的 level 值,从而切换不同的 drawable。例如: ```java imageView.setImageDrawable(getResources().getDrawable(R.drawable.wifi_signal)); imageView.getDrawable().setLevel(2); ``` 以上代码将 imageView 的 drawable 设置为上面定义的 level-list,并将其 level 设置为 2,从而显示对应的 drawable。 需要注意的是,level-list 中的 drawable 必须具有相同的尺寸和相同的边界框,否则会导致显示效果异常。同时,我们还可以在 drawable 中添加 state,来实现更加复杂的状态切换效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值