Android XML Drawable

归志宁无五亩园,读书本意在元元。这篇文章主要讲述Android XML Drawable相关的知识,希望能为你提供帮助。
一、简介
android把任何可绘制在屏幕上的图形图像都称为drawable。drawable是一种抽象的图形,一个继承了Drawable类的子类,或者是一张位图图像。
二、示例
1. 下面通过一些例子感受一下,利用ShapeDrawable创建彩色图形,既然XML Drewable与特定的像素密度无关,因此无需考虑特定像素密度的目录。Drawable的XML文件默认放于res/drawable目录下,利用Drawable和Shape创建一个圆角按钮。创建button_shape_normal.xml文件。

1 < ?xml version="1.0" encoding="utf-8"?> 2 < shape 3xmlns:android="http://schemas.android.com/apk/res/android" 4android:shape="rectangle"> 5 6< corners android:radius="10dp" /> 7< gradient 8android:angle="90" 9android:endColor="#cccccc" 10android:startColor="#acacac" /> 11 12 < /shape>

在style.xml中,修改如下:
1 < style name="Remote_control_btn_style"> 2< item name="android:layout_width"> 0dp< /item> 3< item name="android:layout_height"> match_parent< /item> 4< item name="android:background"> @drawable/button_shape_normal< /item> 5< /style>

这样一个圆角按钮就完成了。
2. 下面完成一个按钮在默认状态下的样式,及在点击按钮后的变化样式,再创建一个按钮点击后的Drewable文件button_shape_pressed.xml:
1 < ?xml version="1.0" encoding="utf-8"?> 2 < shape 3xmlns:android="http://schemas.android.com/apk/res/android" 4android:shape="rectangle"> 5 6< corners android:radius="10dp" /> 7 8< gradient 9android:angle="270" 10android:endColor="#cccccc" 11android:startColor="#acacac" /> 12 13 < /shape>

创建交互式的按钮shape(button_shape.xml):
1 < ?xml version="1.0" encoding="utf-8"?> 2 < selector 3xmlns:android="http://schemas.android.com/apk/res/android"> 4 5< item android:drawable="@drawable/button_shape_pressed" 6android:state_pressed="true" /> 7< item android:drawable="@drawable/button_shape_normal" 8android:state_pressed="false" /> 9 10 < /selector>

再次修改样式文件style.xml,如下所示:
1 < style name="Remote_control_btn_style"> 2< item name="android:layout_width"> 0dp< /item> 3< item name="android:layout_height"> match_parent< /item> 4< item name="android:background"> @drawable/button_shape< /item> 5 < /style>

这样,一个通过xml绘制的按钮就完成了。
三、总结
使用两张图片做了个selector (tab_item_home.xml): 
1 < ?xml version="1.0" encoding="utf-8"?> 2 < selector 3xmlns:android="http://schemas.android.com/apk/res/android"> 4< item android:drawable="@drawable/tab_ic_norm_home" /> 5< item android:state_pressed="true" android:drawable="@drawable/tab_ic_sel_home" /> 6 < /selector>

【Android XML Drawable】为ImageView的src或者background设置样式(itemView.xml),
1 < ImageView 2android:id="@+id/tab_item_icon" 3android:layout_width="wrap_content" 4android:layout_height="wrap_content" 5android:layout_margin="3dp" 6android:src="https://www.songbingjia.com/android/@drawable/tab_item_home"/>

在运行后,点击总是没有效果,那么,问题出在哪里了呢?
在做出如下修改,点击效果就恢复正常了,
1 < ?xml version="1.0" encoding="utf-8"?> 2 < selector 3xmlns:android="http://schemas.android.com/apk/res/android"> 4< item android:state_pressed="true" android:drawable="@drawable/tab_ic_sel_home" /> 5< item android:state_selected="true" android:drawable="@drawable/tab_ic_sel_home"/> 6< item android:drawable="@drawable/tab_ic_norm_home" /> 7 < /selector>

PS: 设置按钮selected状态,在代码中可以动态设置被选中后的持续效果。
总结:default(默认)/不点击的图片应该放在最下边,才会有点击效果,不然,只会显示default图片。
四、核心图像资源子类
  • BitmapDrawable对象:用于创建、平铺、拉伸以及对齐位图。
  • ColorDrawable对象:用于用颜色填充指定的其它各类对象。
  • GradientDrawable对象:用于创建并绘制自定义渐变。
  • AnimationDrawable对象:用于创建基于帧的动画。
  • TransitionDrawable对象:用于创建交叉淡入淡出过渡。
  • NinePatchDrawable对象:用于通过定义可拉伸区域来创建可缩放位图。

    推荐阅读