一.性质

可直接使用.png、.jpg、.gif、9.png等图片作为资源,也可使用多种XML文件作为资源。(就是这些资源都能生成Drawable对象)。并对XML文件作出相关处理

二.XMLDrawable

1.StateListDrawable

作用:StateListDrawable对象所显示的Drawable对象会随着目标组件状态的改变而改变

组成:

根元素<selector/>,子元素<item/>

子元素<item/>的属性:android:color或android:drawable

android:state_xxx:状态

举例:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false"
android:drawable="@mipmap/start"/>
<item android:state_pressed="true"
android:drawable="@mipmap/start_down"/>
</selector>

相关目标组件的状态不列出来

2.LayerDrawable

作用:可包含一个Drawable数组,系统会按照Drawable对象的数组顺序绘制,索引越大越被绘制在上层

根元素:<layer-list>  子元素:<item/>

子元素的属性:android:drawable 作为LayerDrawable的Drawable对象

android:id 为Drawable对象指定标识符

android:buttom|top...等 指定Drawable的绘制位置

实例1:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--调用android自带的id修改,利用@android:id 修改父style的background-->
<item android:drawable="@mipmap/p_1"
android:id="@android:id/background"/>
<item android:drawable="@mipmap/p_2"
android:id="@android:id/progress"/>
</layer-list>

实例2:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--可以在item里面创建各种各样的XMLDrawable-->
<item>
<bitmap android:src="@mipmap/p_3"
android:gravity="center"/>
</item>
<item>
<bitmap android:src="@mipmap/p_4"
android:gravity="center"/>
</item>
</layer-list>

3.ShapeDrawable

作用:设置一个基本的几何图形(矩形、圆形、线条灯)

根元素:<shape/>    根元素的属性:android:shape=["rectangle"|"oval"|"line"|"ring"]

子元素:<corners/>:设置整体或者四个边角的弧度

<gradient/>:渐变(可选择渐变的角度但必须是45的倍数,默认为0,渐变的中心点,渐变的类型,渐变的半径和开始和终止的颜色)

<padding/>:内边距 (可以控制四周的边距)

<size/>:形状的大小 (设置形状的宽高)

<solid/>:单种颜色填充

<stroke/>:绘制边框 (可设置画笔的颜色和粗细 并 设置每画一条线的长度和间距且必须两者都设置才有效)

详情参照:http://blog.csdn.net/lonelyroamer/article/details/8254592

实例:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="3dp"/>
<padding android:left="7dp"
android:right="7dp"
android:bottom="7dp"
android:top="7dp"/>
<gradient android:angle="45"
android:startColor="#0000"
android:endColor="#ffff"/>
</shape>

4.ClipDrawable

作用:从Drawable上截取一个“图片片段”

根元素:<clip>  不使用子元素。

根元素属性: android:drawable: 选定Drawable对象

android:clipOrientation:指定截取方向

android:gravity:从什么地方开始截取

总结:选定图片并选择方向与位置截取图片

使用:从java中获取ClipDrawable并用setLevel()改变截取大小 //setLevel()只能从0~10000

<!--res/drawable/test_clip.xml-->
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/start"
android:clipOrientation="horizontal"
android:gravity="center">
</clip>
<!--res/layout/activity_main.xml-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.chen.android.test.MainActivity"> <ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/test_clip"/>
</LinearLayout>
/*实现图片渐渐展开的效果*/
public class MainActivity extends AppCompatActivity {
int data = 0;
int what = 0X11;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView img = (ImageView)findViewById(R.id.imageView);
//ImageView.getDrawable()获取的是当前控件里的图片,返回的是Drawable类型,还有说明Drawable对象可随意变成子对象并调用子对象的方法
final ClipDrawable clipDrawable = (ClipDrawable)img.getDrawable();
//创建Handler等待计时器传送的信息,使图片扩展
final Handler mHandler = new Handler(){ @Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == what){
clipDrawable.setLevel(data);//扩大截取的图片面积
data += 200;
} }
};
//创建计时器
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (data >= 10000){
timer.cancel();
}
mHandler.obtainMessage(what).sendToTarget();
}
},0,300);
}
}

5.AnimationDrawable

简介:放在res/anim下,支持逐帧动画和补间动画

根元素:<set>   根元素属性:android:interpolator="参数"

参数:@android:anim/ 为开头 选择 linear_interpolator:匀速变换 | accelerate_interpolar:加速变换 | decelerate_interpolator:减速变换

android:shareInterpolator= "true|false" :是否让资源的interpolator与根元素相同

android:duration="时间":定义持续时间

子元素(同样可以设置duration):<alpha>:设置开始和结束的透明度

<scale>:设置缩放的中心、开始的X,Y的尺寸和结束时X,Y的尺寸

<translate>:设置图片的开始位置和结束位置进行位移

<rotate>:设置旋转的中心、开始的角度和结束时候的角度

注意:利用android:fillAfter="true|false":设置保留后的状态(哪个状态想保留就用这个,如果都像就放在<set>中)

使用:利用AnimationUtils的静态方法loadAninmation(Context context,int resId)

<!--在res/anim/test_animtaion中-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:shareInterpolator="true"
android:fillAfter="true"> <alpha android:fromAlpha="50.0"
android:toAlpha="100.0"
/>
<scale android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="1.5"
android:toYScale="1.5"
android:duration="3000"
/>
<translate android:fromXDelta="30"
android:toXDelta="300"
android:fromYDelta="40"
android:toYDelta="90"
android:duration="3000"/> </set>
/*实现动画*/
public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView img = (ImageView)findViewById(R.id.imageView); /*利用工具类获取对象*/
Animation animation= AnimationUtils.loadAnimation(this,R.anim.test_animation);
/*将动画附加在图片上*/
img.startAnimation(animation);
}
}

Drawable类及XMLDrawable的使用的更多相关文章

  1. Android 学习笔记多媒体技术之 Drawable类+Tween(补间动画)+Frame(帧动画)

    学习内容: 1.了解Drawable类的作用 2.如何使用Drawable... 3.了解Tween动画... 4.如何创建和使用Tween动画... 1.Drawable类...   Drawabl ...

  2. Android动画的深入分析

    一.AnimationDrawable的使用 详见:Drawable类及XMLDrawable的使用 补充:通过Animation的setAnimationListener()可以给View动画添加监 ...

  3. Android样式的开发:drawable汇总篇

    Android有很多种drawable类型,除了前几篇详细讲解的shape.selector.layer-list,还有上一篇提到的color.bitmap.clip.scale.inset.tran ...

  4. Android中的Drawable资源

    在Android应用中,常常会用到Drawable资源,比如图片资源等,在Android开发中我们是用Drawable类来Drawable类型资源的. Drawable资源一般存储在应用程序目录的\r ...

  5. XML Drawable与9-Patches

    可绘制对象资源 两种设计工具均属于drawable.Android把任何可绘制在屏幕上的图形图像都称为drawable drawable可以是一种抽象的图形.一个继承 Drawable 类的子类,或者 ...

  6. Android学习之Drawable(一)

    Drawable有很多种,它们表示一种图像概念,但它们不全是图片.Drawable是什么呢?下面是Google Android API中的定义: A Drawable is a general abs ...

  7. Android Drawable绘图学习笔记(转)

    如何获取 res 中的资源 数据包package:android.content.res 主要类:Resources Android SDK中的简介:Class for accessing an ap ...

  8. 系统的Drawable(一)

    系统的Drawable(一) 学习自 <Android 开发艺术探索> <官方文档> https://www.cnblogs.com/popfisher/p/6238119.h ...

  9. Android 程序drawable资源保存到data目录

    今天做了个小功能,就是把我们程序Drawable里面的图片保存到data目录下面,然后另外一个程序需要读取data目录里面保存的图片.涉及了data目录读写.这功能看上去挺简单,不过实际做的时候还是遇 ...

随机推荐

  1. SSM三大框架整合详细教程

    使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  2. MySQL数据库改名字

    在这里首先感谢那个网上已经给出了解决办法的同志 有很多MySQL数据库的初学者可能都会遇到一个关于改名字的问题,可能大家第一时间就会想到去网上搜搜,其实我跟大家的心理是一样的(呵呵). 据我所知,My ...

  3. c#中override重写和new隐藏

    最近学习c#,昨晚看书看到多态.由于个人本身是从事java开发,于是拿来做对比便是自然的. 进入主题吧. c#中,子类要重写基类的方法,必须要基类声明中带有virtual关键字方法或者带有abstra ...

  4. Canvas基础学习(一)——实现简单时钟显示

    HTML5最受欢迎的功能就是<canvas>元素.这个元素负责在页面中设定一个区域,然后就可以通过JavaScript动态地在这个区域中绘制图形.关于<canvas>元素的一些 ...

  5. I/O事件

    I/O事件 最近在研究tornado和gevent,里面涉及了非阻塞I/O.在了解非阻塞I/O之前,需要先了解I/O事件 我们知道,内核有缓冲区.假设有两个进程A,B,进程B想读进程A写入的东西(即进 ...

  6. HDU 1312 Red and Black(bfs)

    Red and Black Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descr ...

  7. SQL Server 与内存相关的术语

    术语 1. virtual address space 虚拟地址空间 它是一个应用程序可以访问的最大地址空间.32位机上是4G(2^32).虚拟地址空间中的数据不一定在物理内存里.可能在缓存文件中. ...

  8. 【配置】电信华为HG8245 无线路由器配置 有贴图

          引子:家里的电信无线路由器连接之后无法直接上上网,只能再次通过PPPoe方式拨号上网.经过网上查询和一番折腾之后,整理攻略如下. 1. 用超级用户登录192.168.1.1(默认密码) 用 ...

  9. ZigBee 协议规范

      ZigBee协议栈体系结构由应用层.应用汇聚层. 网络层.数据链路层和物理层组成,如下图所示:   图1 ZigBee 协议栈体系的层次结构      应用层定义了各种类型的应用业务,是协议栈的最 ...

  10. Qt4.7文档翻译:Qt样式单参考,Qt Style Sheets Reference(超长,超全)

    内容目录 Qt样式单参考 可进行样式设置的部件列表 属性列表 图标列表 属性类型列表 伪状态列表 子控件列表 Qt样式单参考 Qt样式单支持各种属性.伪状态和子控件,这样使得妳能够自行设计部件的外观. ...