• 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对象:用于通过定义可拉伸区域来创建可缩放位图。
  • 相关阅读:
    关于C51的中断函数要注意的几个问题
    WORD文档中插入页码的问题
    【转载】vim复制时的缩进
    【转载】在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间
    【转载】LINUX上MYSQL优化三板斧
    【转载】小结一下linux 2.6内核的四种IO调度算法
    【转载】linux挂载mount参数优化
    【转载】ipcs与Linux共享内存
    【转载】Linux下的IO监控与分析
    【转载】netstat--查看服务器[有效]连接数--统计端口并发数--access.log分析
  • 原文地址:https://www.cnblogs.com/naray/p/5318829.html
Copyright © 2020-2023  润新知