Drawable 是一个图片资源的实体类,是一个抽象类,android中有俩种类型。
- 图片资源
- xml形式的drawable资源
1 ColorDrawable
最简单的一种Drawable,当我们将ColorDrawable绘制到Canvas(画布)上的时候,
会使用一种固定的颜色来填充Paint,然后在画布上绘制出一片单色区域!
ColorDrawable colorDrawable = new ColorDrawable(0xffff2200);
colordrawableIv.setBackground(colorDrawable);
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
3.ShapeDrawable
形状的Drawable咯,定义基本的几何图形,如(矩形,圆形,线条等) 一个具有渐变区域的Drawable,可以实现线性渐变,发散渐变和平铺渐变效果
核心节点:,有如下可选属性:
startColor:渐变的起始颜色
centerColor:渐变的中间颜色
endColor:渐变的结束颜色
type:渐变类型,可选(linear,radial,sweep),
线性渐变(可设置渐变角度),发散渐变(中间向四周发散),平铺渐变
centerX:渐变中间亚瑟的x坐标,取值范围为:0~1
centerY:渐变中间颜色的Y坐标,取值范围为:0~1
angle:只有linear类型的渐变才有效,表示渐变角度,必须为45的倍数哦
gradientRadius:只有radial和sweep类型的渐变才有效,radial必须设置,表示渐变效果的半径
useLevel:判断是否根据level绘制渐变效果
简单的demo,大家可以查询api来做更多的效果
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<gradient
android:angle="90"
android:centerColor="#FFEB82"
android:endColor="#35B2DE"
android:startColor="#DEACAB" />
<stroke
android:width="3dip"
android:color="#fff"
android:dashGap="5dip"
android:dashWidth="4dip" />
</shape>
BitmapDrawable
对Bitmap的一种封装,可以设置它包装的bitmap在BitmapDrawable区域中的绘制方式,有:
平铺填充,拉伸填或保持图片原始大小!以为根节点!
可选属性如下:
src:图片资源~
antialias:是否支持抗锯齿
filter:是否支持位图过滤,支持的话可以是图批判显示时比较光滑
dither:是否对位图进行抖动处理
gravity:若位图比容器小,可以设置位图在容器中的相对位置
tileMode:指定图片平铺填充容器的模式,设置这个的话,gravity属性会被忽略,有以下可选值:
disabled(整个图案拉伸平铺),clamp(原图大小),
repeat(平铺),mirror(镜像平铺)
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@mipmap/ic_launcher"
android:tileModeX="disabled">
</bitmap>
ClipDrawable
Clip可以译为剪的意思,我们可以把ClipDrawable理解为从位图上剪下一个部分;
Android中的进度条就是使用ClipDrawable来实现的,他根据设置level的值来决定剪切
区域的大小,根节点是clipOrietntion:设置剪切的方向,可以设置水平和竖直2个方向
gravity:从那个位置开始裁剪
drawable:引用的drawable资源,为空的话需要有一个Drawable类型的子节点
ps:这个Drawable类型的子节点:就是在
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/banner"
android:gravity="center">
</clip>
private ClipDrawable cd;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0x123) {
cd.setLevel(cd.getLevel() + 500);
}
}
};
cd = (ClipDrawable) clipBanner.getDrawable();
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(0x123);
if (cd.getLevel() >= 10000) {
timer.cancel();
}
}
}, 0, 300);
RotateDrawable
用来对Drawable进行旋转,也是通过setLevel来控制旋转的,最大值也是:10000
fromDegrees:起始的角度,,对应最低的level值,默认为0
toDegrees:结束角度,对应最高的level值,默认360
pivotX:设置参照点的x坐标,取值为0~1,默认是50%,即0.5
pivotY:设置参照点的Y坐标,取值为0~1,默认是50%,即0.5
ps:如果出现旋转图片显示不完全的话可以修改上述两个值解决!
drawable:设置位图资源
visible:设置drawable是否可见!
AnimationDrawable
AnimationDrawable是用来实现Android中帧动画的,就是把一系列的
Drawable,按照一定得顺序一帧帧地播放;Android中动画比较丰富,有传统补间动画,平移,
缩放等等效果,但是这里我们仅仅介绍这个AnimationDrawable实现帧动画,关于alpha,scale,
translate,rotate等,后续在动画章节再进行详细的介绍~
我们这里使用作为根节点
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item
android:drawable="@mipmap/loading01"
android:duration="100" />
<item
android:drawable="@mipmap/loading02"
android:duration="100" />
<item
android:drawable="@mipmap/loading03"
android:duration="100" />
<item
android:drawable="@mipmap/loading04"
android:duration="100" />
<item
android:drawable="@mipmap/loading05"
android:duration="100" />
<item
android:drawable="@mipmap/loading06"
android:duration="100" />
<item
android:drawable="@mipmap/loading07"
android:duration="100" />
<item
android:drawable="@mipmap/loading08"
android:duration="100" />
<item
android:drawable="@mipmap/loading09"
android:duration="100" />
<item
android:drawable="@mipmap/loading10"
android:duration="100" />
<item
android:drawable="@mipmap/loading11"
android:duration="100" />
<item
android:drawable="@mipmap/loading12"
android:duration="100" />
<item
android:drawable="@mipmap/loading13"
android:duration="100" />
<item
android:drawable="@mipmap/loading14"
android:duration="100" />
<item
android:drawable="@mipmap/loading15"
android:duration="100" />
</animation-list>
ad = (AnimationDrawable) pull.getDrawable();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
ad.start();
}
}, 300);