Android——Drawable的常用使用方法
学习笔记 drawable使用方法
一、概念
1. Android 资源分类
Android 应用下除了 res 目录用于存放资源之外,assets 目录也用于存放资源。一般来说,assets 目录下存放的资源代表应用无法直接访问的原生资源,应用程序需要通过 AssetManager 以二进制流的形式来读取资源。而res 目录下的资源,Android SDK 会在编译该应用时,自动在 R.java 文件中为这些资源创建索引,程序可直接通过 R 资源清单类访问。
无法直接访问的原生资源:保存在 asset 目录下
可通过 R 资源清单类访问的资源,保存在 res 目录下
2. Drawable 资源
.png、.jpg、xml文件都可被系统编译成 Drawable 类对象
二、使用
1.StateListDrawable(
可包含一个 Drawable 数组,让目标组件在不同状态显示不同 Drawable。SateListDrawable 显示的 Drawable 会随目标组件的状态改变而自动切换。
对应的 xml 文件的根节点
2.LayerDrawable(
可包含一个 Drawable 数组,系统会按这些 Drawable 对象的数组顺序来绘制它们,索引最大的 Drawable 对象将会被绘制在最上面。类似于布局中的 FrameLayout 的效果。
对应的 xml 文件的根元素为
【实现一个带灰色背景的 Logo】
android:gravity="center"> android:gravity="center" android:src="@drawable/iot_loading" />
3.ShapeDrawable(
【带边框线圆角背景图】
xmlns:app="http://schemas.android.com/apk/res-auto"> android:width="2dp" android:color="@android:color/white" />
【带单边框背景图】
4.BitmapDrawable
表示一张图片,与直接引用原始图片相比可以设置一些效果
5.RotateDrawable
可以在当前的基础上旋转任意一个 Drawable。
https://www.jianshu.com/p/0e0de2cdd2bb
【提示气泡效果】
6.LevelListDrawable
A resource that manages a number of alternate Drawables, each assigned a maximum numerical value. Setting the level value of the object with `[Drawable.setLevel(int)](https://developer.android.com/reference/android/graphics/drawable/Drawable#setLevel(int))` will load the image with the next greater or equal value assigned to its max attribute. A good example use of a LevelListDrawable would be a battery level indicator icon, with different images to indicate the current battery level.
可包含一组 Drawable,根据 level 来决定显示哪个 Drawable,为每一个 Drawable 分配一个level值(maximum numerical value),
通过Drawable.setLevel(int value)设置 Drawable 的 level 值,以决定加载哪一个 Drawable,选择和 设置的 level 最接近的那个 Drawable。
如果想要一个 ImageView 上,根据不同条件显示不同的 Drawable,可以使用
LevelListDrawable的基本使用
带层级的 Drawable 组合。
(1)将两个状态的图片组合在level-list中
android:drawable="@drawable/light_open" android:maxLevel="0" android:minLevel="0">
android:drawable="@drawable/light_close" android:maxLevel="1" android:minLevel="1">
(2)将上述 Drawable 设置为 ImageView 的src
android:id="@+id/first_layout_level_iv" android:layout_width="200dp" android:src="@drawable/light_level" android:layout_height="200dp" />