Android有很多种drawable类型,除了前几篇详细讲解的shape、selector、layer-list,还有上一篇提到的color、bitmap、clip、scale、inset、transition、rotate、animated-rotate、lever-list等等,本篇文章将汇总介绍所有剩下的drawable资源。
color标签
<!-- 文件:res/drawable/white.xml --> <color xmlns:android="http://schemas.android.com/apk/res/android" android:color="#FFFFFF" />
<!-- 文件:res/values/colors.xml --> <resources> <color name="white">#FFFFFF</color> </resources>
level-list标签
- android:drawable 指定drawable资源,如果不设置该属性,也可以定义drawable类型的子标签
- android:minLevel 该item的最小level值
- android:maxLevel 该item的最大level值
<?xml version="1.0" encoding="utf-8"?> <level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/battery_low" android:maxLevel="10" android:minLevel="0" /> <item android:drawable="@drawable/battery_below_half" android:maxLevel="50" android:minLevel="10" /> <item android:drawable="@drawable/battery_over_half" android:maxLevel="99" android:minLevel="50" /> <item android:drawable="@drawable/battery_full" android:maxLevel="100" android:minLevel="100" /> </level-list>
//level-list 标签 ImageView level_list = (ImageView) findViewById(R.id.level_list); level_list.getDrawable().setLevel(10);
<?xml version="1.0" encoding="utf-8"?> <level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/battery_low" android:maxLevel="10" /> <item android:drawable="@drawable/battery_below_half" android:maxLevel="50" /> <item android:drawable="@drawable/battery_over_half" android:maxLevel="99" /> <item android:drawable="@drawable/battery_full" android:maxLevel="100" /> </level-list>
transition标签
<?xml version="1.0" encoding="utf-8"?> <transition xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/on" /> <item android:drawable="@drawable/off" /> </transition>
//transition 标签 TransitionDrawable transition = (TransitionDrawable) getResources().getDrawable(R.drawable.bg_transition); final ImageView transition_img = (ImageView) findViewById(R.id.transition); transition_img.setImageDrawable(transition); boolean istransition = false; transition_img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { istransition = !istransition; if (istransition) { transition.startTransition(1500); } else { transition.reverseTransition(1500); } } })
rotate标签
- android:drawable 指定drawable资源,如果不设置该属性,也可以定义drawable类型的子标签
- android:fromDegrees 起始的角度度数
- android:toDegrees 结束的角度度数,正数表示顺时针,负数表示逆时针
- android:pivotX 旋转中心的X坐标,浮点数或是百分比。浮点数表示相对于drawable的左边缘距离单位为px,如5; 百分比表示相对于drawable的左边缘距离按百分比计算,如5%; 另一种百分比表示相对于父容器的左边缘,如5%p; 一般设置为50%表示在drawable中心
- android:pivotY 旋转中心的Y坐标
- android:visible 设置初始的可见性状态,默认为false
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_arrow" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="180" />
animation-list标签
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/anim1" android:duration="1000" /> <item android:drawable="@mipmap/anim2" android:duration="1000" /> <item android:drawable="@mipmap/anim3" android:duration="1000" /> </animation-list>
animated-rotate标签
- android:drawable 指定drawable资源,如果不设置该属性,也可以定义drawable类型的子标签
- android:pivotX 旋转中心的X坐标
- android:pivotY 旋转中心的Y坐标
- android:visible 设置初始的可见性状态,默认为false
<?xml version="1.0" encoding="utf-8"?> <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/img_daisy" android:pivotX="50%" android:pivotY="50%" android:visible="false" />
inset标签
- android:drawable 指定drawable资源,如果不设置该属性,也可以定义drawable类型的子标签
- android:visible 设置初始的可见性状态,默认为false
- android:insetLeft 左边距
- android:insetRight 右边距
- android:insetTop 顶部边距
- android:insetBottom 底部边距
- android:inset 设置统一边距,会覆盖上面四个属性,但API Level要求为21,即Android 5.0
1.定义bg_inset.xml:bg_2为drawable下任意一张图片
<?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/bg_2" android:insetBottom="100dp" android:insetLeft="100dp" android:insetRight="100dp" android:insetTop="100dp" />2.在XML中引用:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="@drawable/bg_inset" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" />
clip标签
- android:drawable 指定drawable资源,如果不设置该属性,也可以定义drawable类型的子标签
-
android:clipOrientation 设置裁剪的方向,取值为以下两个值之一:
- horizontal 在水平方向上进行裁剪,条状的进度条就是水平方向的裁剪
- vertical 在垂直方向上进行裁剪
-
android:gravity 设置裁剪的位置,可取值如下,多个取值用 | 分隔:
- top 图片放于容器顶部,不改变图片大小。当裁剪方向为vertical时,会裁掉图片底部
- bottom 图片放于容器底部,不改变图片大小。当裁剪方向为vertical时,会裁掉图片顶部
- left 图片放于容器左边,不改变图片大小,默认值。当裁剪方向为horizontal,会裁掉图片右边部分
- right 图片放于容器右边,不改变图片大小。当裁剪方向为horizontal,会裁掉图片左边部分
- center 图片放于容器中心位置,包括水平和垂直方向,不改变图片大小。当裁剪方向为horizontal时,会裁掉图片左右部分;当裁剪方向为vertical时,会裁掉图片上下部分
- fill 拉伸整张图片以填满容器的整个高度和宽度。这时候图片不会被裁剪,除非level设为了0,此时图片不可见
- center_vertical 图片放于容器垂直方向的中心位置,不改变图片大小。裁剪和center时一样
- center_horizontal 图片放于容器水平方向的中心位置,不改变图片大小。裁剪和center时一样
- fill_vertical 在垂直方向上拉伸图片以填满容器的整个高度。当裁剪方向为vertical时,图片不会被裁剪,除非level设为了0,此时图片不可见
- fill_horizontal 在水平方向上拉伸图片以填满容器的整个宽度。当裁剪方向为horizontal时,图片不会被裁剪,除非level设为了0,此时图片不可见
- clip_vertical 附加选项,裁剪基于垂直方向的gravity设置,设置top时会裁剪底部,设置bottom时会裁剪顶部,其他情况会同时裁剪顶部和底部
- clip_horizontal 附加选项,裁剪基于水平方向的gravity设置,设置left时会裁剪右侧,设置right时会裁剪左侧,其他情况会同时裁剪左右两侧
-
定义clip.xml:
<?xml version="1.0" encoding="utf-8"?> <clip xmlns:android="http://schemas.android.com/apk/res/android" android:clipOrientation="horizontal" android:drawable="@drawable/img4clip" android:gravity="left" />
-
在ImageView中引用:
<ImageView android:id="@+id/img" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_img" android:src="@drawable/clip" />
-
在代码中设置level:
ImageView img = (ImageView) findViewById(R.id.img); img.getDrawable().setLevel(5000); //level范围值0~10000
scale标签
- android:drawable 指定drawable资源,如果不设置该属性,也可以定义drawable类型的子标签
- android:scaleHeight 设置可缩放的高度,用百分比表示,格式为XX%,0%表示不做任何缩放,50%表示只能缩放一半
- android:scaleWidth 设置可缩放的宽度,用百分比表示,格式为XX%,0%表示不做任何缩放,50%表示只能缩放一半
- android:scaleGravity 设置drawable缩放后的位置。必须是下面的一个或多个值(多个值之间用"|"分割):
- top 图片放于容器顶部,不改变图片大小
- bottom 图片放于容器底部,不改变图片大小
- left 图片放于容器左边,不改变图片大小,默认值
- right 图片放于容器右边,不改变图片大小
- center 图片放于容器中心位置,包括水平和垂直方向,不改变图片大小
- fill 拉伸整张图片以填满容器的整个高度和宽度
- center_vertical 图片放于容器垂直方向的中心位置,不改变图片大小
- center_horizontal 图片放于容器水平方向的中心位置,不改变图片大小
- fill_vertical 在垂直方向上拉伸图片以填满容器的整个高度
- fill_horizontal 在水平方向上拉伸图片以填满容器的整个宽度
- clip_vertical 附加选项,裁剪基于垂直方向的gravity设置,设置top时会裁剪底部,设置bottom时会裁剪顶部,其他情况会同时裁剪顶部和底部
- clip_horizontal 附加选项,裁剪基于水平方向的gravity设置,设置left时会裁剪右侧,设置right时会裁剪左侧,其他情况会同时裁剪左右两侧
- android:useIntrinsicSizeAsMinimum 设置drawable原有尺寸作为最小尺寸,设为true时,缩放基本无效,API Level最低要求为11
-
定义scale.xml:
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/img4scale" android:scaleGravity="left" android:scaleHeight="50%" android:scaleWidth="50%" android:useIntrinsicSizeAsMinimum="false" />
-
在ImageView中引用:
<ImageView android:id="@+id/img" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_img" android:src="@drawable/scale" />
-
在代码中设置level:
ImageView img = (ImageView) findViewById(R.id.img); img.getDrawable().setLevel(5000); //level范围值0~10000