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
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:shape="rectangle">
 5 
 6     <corners android:radius="10dp" />
 7     <gradient
 8         android:angle="90"
 9         android:endColor="#cccccc"
10         android: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
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:shape="rectangle">
 5 
 6     <corners android:radius="10dp" />
 7 
 8     <gradient
 9         android:angle="270"
10         android:endColor="#cccccc"
11         android:startColor="#acacac" />
12 
13 </shape>

  创建交互式的按钮shape(button_shape.xml):

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <selector
 3     xmlns:android="http://schemas.android.com/apk/res/android">
 4 
 5     <item android:drawable="@drawable/button_shape_pressed"
 6           android:state_pressed="true" />
 7     <item android:drawable="@drawable/button_shape_normal"
 8           android: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
3     xmlns: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>

  为ImageView的src或者background设置样式(itemView.xml),

1 <ImageView
2         android:id="@+id/tab_item_icon"
3         android:layout_width="wrap_content"
4         android:layout_height="wrap_content"
5         android:layout_margin="3dp"
6         android:src="@drawable/tab_item_home"/>

  在运行后,点击总是没有效果,那么,问题出在哪里了呢?

  在做出如下修改,点击效果就恢复正常了,

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector
3     xmlns: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对象:用于通过定义可拉伸区域来创建可缩放位图。
原文地址:https://www.cnblogs.com/naray/p/5318829.html