android中的Drawable

    xiaoxiao2021-03-25  94

    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);
    转载请注明原文地址: https://ju.6miu.com/read-19799.html

    最新回复(0)