LeveListDrawable
对应的是level-list
标签,它表示的是一组可进行切换的drawable
图片资源集合,集合里面的每一项drawable
资源都有一个对应的level
,在代码中通过View
的setLevel()
方法设置不同的等级,等级的范围为0-10000
(最小值和默认值都是0
),然后根据不同的等级在level-list
中匹配对应的drawable
资源来显示。判断加载某项的方式为:level-list
中某项的maxLevel
数值大于或者等于setLevel
设置的数值时就会被加载。
使用场景:
- 音量大小调节
- 简单的进度条
- 电量剩余图标
wifi
信号信息等
语法:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/drawable_resource"
android:maxLevel="integer"
android:minLevel="integer" />
</level-list>
level-list
中item
放置的前后顺序需要注意,系统会从上往下匹配,如果查找到的item
符合当前的状态,则不会再继续向下查找其它item
,同时Level
值不能为负数,只能是正整数。
属性:
drawable
为drawable
类型,匹配的图片资源。maxLevel
为integer
类型,匹配的最大值。minLevel
为integer
类型,匹配的最小值。
举例:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 值为0~25时显示图片 -->
<item
android:drawable="@drawable/level1"
android:maxLevel="25"
android:minLevel="0" />
<!-- 值为26~50时显示图片 -->
<item
android:drawable="@drawable/level2"
android:maxLevel="50"
android:minLevel="26" />
<!-- 值为51~75时显示图片 -->
<item
android:drawable="@drawable/level3"
android:maxLevel="75"
android:minLevel="51" />
<!-- 值为76~100时显示图片 -->
<item
android:drawable="@drawable/level4"
android:maxLevel="100"
android:minLevel="76" />
</level-list>
引用:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!-- ImageView可通过src或background设置 -->
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/level_list" />
<!-- 其它控件通过background设置 -->
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/level_list" />
</LinearLayout>
应用:
package com.example.administrator.test;
import android.app.Activity;
import android.graphics.drawable.LevelListDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView mIv;
private Button mBtn;
private Button mChange;
private int num = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setLintener();
}
private void initView() {
mIv = (ImageView) findViewById(R.id.iv);
mBtn = (Button) findViewById(R.id.btn);
mChange = (Button) findViewById(R.id.change);
}
private void setLintener() {
mChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (num > 90) {
num = 0;
}
//ImageView如果是通过src引用的,可通过getDrawable方法获取LevelListDrawable对象,也可直接通过setImageLevel方法直接设置level值
LevelListDrawable levelListDrawable1 = (LevelListDrawable) mIv.getDrawable();
levelListDrawable1.setLevel(num);
//如果是通过background引用的,可通过getBackground方法获取LevelListDrawable对象设置level值
LevelListDrawable levelListDrawable2 = (LevelListDrawable) mBtn.getBackground();
levelListDrawable2.setLevel(num);
num += 30;
}
});
}
}
使用LevelListDrawable
注意事项:
1. 默认的level
为0
,如果没有和0
匹配的level
,那么就不显示。
2. level
匹配以maxLevel
优先,即如果有个item
中minLevel="1" maxLevel="2"
,另一个item
中minLevel="2" maxLevel="3"
,如果此时设置level
为2
,那么会匹配第一个item
。
版权声明:本文为my_rabbit原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。