android中的Drawable

Drawable 是一个图片资源的实体类,是一个抽象类,android中有俩种类型。

  1. 图片资源
  2. 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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值