今天简单的介绍一下有关以下5中的应用:

  1. Statelistdrawable
  2. Layerdrawable
  3. Shapeddrawable
  4. Clipdrawable
  5. Animationdrawable

1. Statelistdrawable的应用:

描述:当使用此类型定义View的前景,背景图时由对象的当前状态的改变对应的图片也随之改名。

定义:XML的根元素为<selector />,包含<item/>,文件存放在res/drawable中。

支持的状态如下:

在指定的布局资源文件下的应用如下:

<!—使用StateListDrawable资源 -->
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@drawable/my_image"
/>

不难看出我们把定义drawable的xml取名为my_image.xml然后直接在布局资源文件中引入此xml文件即可。

2. Layerdrawable的应用:

描述:由多个图片叠加排放的背景,索引越大(定义在最上方的是索引最小)的绘制在最顶层。一般应用于seekbar,progressbar叠加型组件上以及自定义组件上。

定义:XML的根元素为<layer-list />,包含<item/>可再次嵌套<bitmap/>,文件存放在res/drawable中。

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 定义轨道的背景 -->
<item android:id="@android:id/background"
android:drawable="@drawable/grow" />
<!-- 定义轨道上已完成部分的外观-->
<item android:id="@android:id/progress"
android:drawable="@drawable/ok" />
</layer-list>

也可以通过嵌套bitmap元素,如设置一个logo时可以应用:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/icon"
android:gravity="center" />
</item>
<item android:top="25dp" android:left="25dp">
<bitmap android:src="@drawable/icon"
android:gravity="center" />
</item>
<item android:top="50dp" android:left="50dp">
<bitmap android:src="@drawable/icon"
android:gravity="center" />
</item>
</layer-list>

top,left之类指的是绘制的起点位置。在指定的布局资源文件下的应用如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<!-- 定义一个拖动条,并改变轨道外观 -->
<SeekBar
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"
android:progressDrawable="@drawable/my_bar"

style="@android:style/Widget.ProgressBar.Horizontal"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/layout_logo"

/>
</LinearLayout>

3. Shapeddrawable的应用:

描述:定义组件的形状的,如:矩形,圆形,线条,圆角矩形之类的。

定义:XML的根元素为<shape />,包含<conners/>,<gradient/>等,文件存放在res/drawable中。

在指定的布局资源文件下的应用如下:

在指定的组件中定义android:background="@drawable/my_shape_1"

4. Clipdrawable的应用:

描述:通过截取图片来设定图片,配合组件的setLevel(int level)方法使用。Level的值是截取的大小如果为0那么就是无截取,如果为10000那么是整个图片显示。

定义:XML的根元素为<clip />,文件存放在res/drawable中。

<?xml version="1.0" encoding="UTF-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/shuangta"
android:clipOrientation="horizontal"
android:gravity="center">
</clip>

在指定的布局资源文件下的应用如下:

例如在imageView中定义android:src="@drawable/my_clip"

然后再代码中调用set/getLevel(int level)方法:

//获取图片所显示的ClipDrawable对象
final ClipDrawable drawable = (ClipDrawable) imageview.getDrawable(); //修改ClipDrawable的level值
drawable.setLevel(drawable.getLevel() + 200);

这种方法可以实现从中间部分展开图片的效果。

5. Animationdrawable

描述:代表一个动画,分为逐帧动画(一张一张排列)与补间动画(开始到结束的演变过程)。

定义:XML的根元素为一般为<set/>也可以用<animation-list />,文件放在res/anim中。

Set内的元素有如下4个:

animation也可以定义动画播放速度如下:

具体参考如下:

pivotX/Y是指定中心点的用在定义scale与rotate它们都需要围着一个点变化。

这些(translate/rotate等)子元素都可以指定一个属性叫android:interpolator值来定义播放速度。

也可以直接在set跟元素中定义android:shareInterpolator=”true”的形式定义代表所有的子元素的播放速度为一致。

在代码中首先导入animation资源通过

//加载动画资源
final Animation anim = AnimationUtils.loadAnimation(this, R.anim.my_anim);
//设置动画结束后保留结束状态
anim.setFillAfter(true);
//开始播放
组件.startAnimation(anim);

以上可以理解为是一个补间动画。

<animation-list>形式可以理解为逐帧动画。

<?xml version="1.0" encoding="utf-8"?>
<!-- 定义动画只播放一次,不循环 -->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item android:drawable="@drawable/bom_f01" android:duration="80" />
<item android:drawable="@drawable/bom_f02" android:duration="80" />
<item android:drawable="@drawable/bom_f03" android:duration="80" />
<item android:drawable="@drawable/bom_f04" android:duration="80" />
<item android:drawable="@drawable/bom_f05" android:duration="80" />
<item android:drawable="@drawable/bom_f06" android:duration="80" />
<item android:drawable="@drawable/bom_f07" android:duration="80" />
<item android:drawable="@drawable/bom_f08" android:duration="80" />
<item android:drawable="@drawable/bom_f09" android:duration="80" />
<item android:drawable="@drawable/bom_f10" android:duration="80" />
<item android:drawable="@drawable/bom_f11" android:duration="80" />
<item android:drawable="@drawable/bom_f12" android:duration="80" />
<item android:drawable="@drawable/bom_f13" android:duration="80" />
<item android:drawable="@drawable/bom_f14" android:duration="80" />
<item android:drawable="@drawable/bom_f15" android:duration="80" />
<item android:drawable="@drawable/bom_f16" android:duration="80" />
<item android:drawable="@drawable/bom_f16" android:duration="80" />
<item android:drawable="@drawable/bom_f17" android:duration="80" />
<item android:drawable="@drawable/bom_f18" android:duration="80" />
<item android:drawable="@drawable/bom_f19" android:duration="80" />
<item android:drawable="@drawable/bom_f20" android:duration="80" />
<item android:drawable="@drawable/bom_f21" android:duration="80" />
<item android:drawable="@drawable/bom_f22" android:duration="80" />
<item android:drawable="@drawable/bom_f23" android:duration="80" />
<item android:drawable="@drawable/bom_f24" android:duration="80" />
<item android:drawable="@drawable/bom_f25" android:duration="80" />
<item android:drawable="@drawable/bom_f26" android:duration="80" />
<item android:drawable="@drawable/bom_f27" android:duration="80" />
</animation-list>

是一种逐个播放每一张图片形成一个动画。

//定义后可以再布局文件中加载进来
android:background="@anim/my_anim"。

然后再代码中通过应用的组件上获取AnimationDrawable来播放动画。默认是不会播放的。

//获取AnimationDrawable动画对象
final AnimationDrawable anim = (AnimationDrawable)imageView.getBackground();
//开始播放动画
anim.start();
//停止播放动画
anim.stop();

这样一来你的对象组件的背景图片开始动起来了。但是只是在原地变化。

再这基础上可以通过TranslateAnimation类让此组件移动起来,那么就会形成一个组件一边变化一边移动的动画 。

注意:

组件.startAnimation(Animation anim);

组件.start (AnimationDrawable animDraw);

这两个可以同时使用,能做出组件一边变化一边移动的动画 。

除了TranslateAnimation类以外还有如下几个Animation类:

AlphaAnimation,ScaleAnimation,RotateAnimation,TranslateAnimation。

Drawable的更多相关文章

  1. android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!

    android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...

  2. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  3. drawable微技巧以及layout的小知识

    来源:http://blog.csdn.net/guolin_blog/article/details/50727753 最简单的办法是把dp理解成实际物理单位,和英寸.毫米等一样(1dp等于1/16 ...

  4. android ImageLoader 混淆加载drawable出现黑色图片的解决方案

    在网上找了很久,没有找到.后来看了源码才知道... 多线程异步加载和显示图片(图片来源于网络.sd卡.assets文件夹,drawable文件夹(不能加载9patch),新增加载视频缩略图) Stri ...

  5. Android Drawable 那些不为人知的高效用法

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43752383,本文出自:[张鸿洋的博客] 1.概述 Drawable在我们平时的 ...

  6. Android Drawable、Bitmap、byte[]之间的转换

    转自http://blog.csdn.net/june5253/article/details/7826597 1.Bitmap-->Drawable Bitmap drawable2Bitma ...

  7. Android中Bitmap,byte[],Drawable相互转化

    一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...

  8. PopupWindow 点击外部和返回键无法消失背后的真相(setBackgroundDrawable(Drawable background))

    刚接手PopupWindow的时候,我们都可能觉得很简单,因为它确实很简单,不过运气不好的可能就会踩到一个坑: 点击PopupWindow最外层布局以及点击返回键PopupWindow不会消失 新手在 ...

  9. textview设置drawable

    textview可以在上下左右四个方向添加图片,同时也可以动态改变这些图片:   下面有我写的一个例子: 在xml文件中:  <TextView                 android: ...

  10. 动画的使用—Drawable Animation

    Drawable Animation可以称为帧动画,因为它是通过每次播放一帧Drawable资源实现的. Drawable Animation算不上真正意义上的动画,因为它的内部实现是通过定时发送消息 ...

随机推荐

  1. Centos7 install Openstack - (第三节)添加镜像服务(Glance)

    Centos7 install Openstack - (第三节)添加镜像服务(Glance) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack ...

  2. 慕课网-安卓工程师初养成-1-6 MyEclipse的使用简介

    来源 http://www.imooc.com/video/1414 http://www.my-eclipse.cn/ MyEclipse 2014 官方版下载地址  声明:MyEclipse 20 ...

  3. 查看linux占用内存/CPU最多的进程

    可以使用一下命令查使用内存最多的10个进程 ps -aux | sort -k4nr | head -n 10 可以使用一下命令查使用CPU最多的10个进程 ps -aux | sort -k3nr ...

  4. 学习记录 java 链表知识

    01.import java.util.HashMap; 02.import java.util.Scanner; 03.import java.util.Stack; 04. 05./** 06. ...

  5. 华为OJ平台——完美数

    import java.util.Scanner; /** * * 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数. * 它所有的真因子(即除了自身以外的约数)的和(即 ...

  6. JS实现星级评分

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. dedecms代码研究一

    dedecms相信大家一定都知道这个cms系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统.而模板系统也是其他cms系统比较难模仿的的东西,这个东 ...

  8. JS与JQ倒计时的写法

    页面需要制作一个倒计时的功能:然后度娘了一遍,找到两种写法,原生JS与JQ 的,经过测试原生JS在IE可能会有不刷新的现象所以结合了一个大神的JQ写法修改好了一个. 原生JS写法: HTML: < ...

  9. virtual box 中两个虚拟机 、宿主机 三机互通并且能上外网设置

    virtual box 中两个虚拟机 .宿主机 三机互通并且能上外网设置 1:背景:因为需要学习linux,所以需要在虚拟机里装linux系统,测试要么宿主机与虚拟机linux网络实验测试:要么另一台 ...

  10. php5.3 连接 sqlserver2005

    操作系统:XP php5.3以后,已经不对sqlserver支持连接扩展了,不过微软官方还是对php5.3以后进行了扩展解决方案. 1.确认要连接sqlserver的数据库版本为2005 2.确认ph ...