Android Drawable浅谈

来源:互联网 发布:淘宝网性用品 编辑:程序博客网 时间:2024/05/18 19:19

前几日,在github发现一种自定义view的lauchIcon更新的类似于锤子的下载应用时的lauch icon的展示状态,十分的好看。关键是它提到了一种我从未接触过的自定义view的实现方式,那就是通过自定义Drawable来实现。所以毅然决然的踏进了Drawable的坑里。

先说Drawable这个类我们理解它为一个死的类,它并不是view,它并不存在onMeasure等的生命周期函数,借助一张工匠若水大神的图片

这里写图片描述

深入理解还是得看源码:先看类的注释
/**
* A Drawable is a general abstraction for "something that can be drawn." Most
* often you will deal with Drawable as the type of resource retrieved for
* drawing things to the screen; the Drawable class provides a generic API for
* dealing with an underlying visual resource that may take a variety of forms.
* Unlike a {@link android.view.View}, a Drawable does not have any facility to
* receive events or otherwise interact with the user.

概括的说就是,Drawable是个可以被画上的抽象的概念,它大部分的用处是在屏幕上画上从Drawable中的内容;本质上它就是个工具类,它提供一系列的API方法来处理各种资源的绘制,但是它又不同于View,它不能有任何的事件交互能力。再看方法:
这里写图片描述

其实读懂api中的英文注释就大致懂了Drawable的使用方法了。特别说一下,Drawable的内部类Callback用来展示drawable的动画,

Drawable也可以用xml来定义,只要在drawable文件夹中新建xml文件即可。需要使用getIntrinsicWidth以及getIntrinsicHeight方法指定drawable的固定宽高,因为在view的使用方法中会调用这两个方法在view中的指定区域绘制Drawable。

再强调一点,drawable是没有生命周期的,它的draw方法都是在各种view的onDraw中调用的。

在自定义这个波浪效果的过程中,认识到这几个类ColorFilter,Choreographer,Xfermode。
1.ColorFilter:颜色过滤器,它是个很强大的类,关于这个类很多可以说的,我只提一点,相机中的许多的滤镜效果都是通过这个类实现的。他的子类ColorMatrixColorFilter通过4*5的矩阵对paint中的色素值进行变换。
2.Choreographer:编舞者,控制绘制的循序,是个很重的类。
3.Xfermode:图像叠加模式,关于安卓的图像的叠加模式有许多的文章,有很多的叠加效果。强调一点,在canvas中需要使用saveLayer方法来回叠加图形,在绘制结束的时候需要使用canvas的restoreToCount方法释放图层。

0 0