美文网首页
Drawable简单分析

Drawable简单分析

作者: boboyuwu | 来源:发表于2017-06-30 15:48 被阅读16次

    关于这个类先看看官网API对于它的解释:
    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 View
    , a Drawable does not have any facility to receive events or otherwise interact with the user.

    大体意思就是Drawable是一个生成我们可以绘制内容的抽象类,将Drawable作为一个获取绘制内容到屏幕的资源类型处理, Drawable类提供了一个通用API,用于处理可能采用各种形式的底层可视资源。不同于View,Drawable不提供任何方式与用户交互。

    可以看到Drawable是一个提供绘制资源的一个抽象类,它只做它份内的本分工作,至于与用户进行交互行为,还是View干的事,职责分明各司其职.

    Drawable中提供一个Drawable.Callback接口,这个接口中有三个实现方法:


    QQ截图20170630152802.png

    我们看解释:
    abstract void invalidateDrawable(Drawable who) 当需要重画时调用这个方法

    abstract void scheduleDrawable(Drawable who, Runnable what, long when) 调用这个方法可以执行动画的下一帧

    abstract void unscheduleDrawable(Drawable who, Runnable what) 调用这个方法取消执行之前调用
    scheduleDrawable执行的帧动画

    OK我们先分析第一个方法,我们都知道View中提供了setBackground(Drawable background)、setForeground(Drawable foreground) 等等一些设置背景等方法,参数中传递的都是Drawable,而ImageView中也提供了setImageDrawable(@Nullable Drawable drawable)方法同样参数也是Drawable,在这些方法中都调用了Drawable中的setCallback(@Nullable Callback cb) 设置了回调接口,那么也就是说ImageView,View都是实现了上面的三个方法.

    所以说当我们在Drawable或者它的子类中调用上述方法时其实都会最终调用到设置它的View类中的具体实现方法,例如View或者ImageView.

    结合分析的知识我准备趁热打铁进一步分析一下系统5.0官方控件SwipeRefreshLayout,SwipeRefreshLayout利用了事件分发机制,实现了下拉刷新控件,并且实现的代码非常简洁,好奇的我准备分析一下SwipeRefreshLayout全部实现过程,而SwipeRefreshLayout里面主要有二个类一个是自定义View
    CircleImageView和自定义Drawable MaterialProgressDrawable。

    分析过程可能比较长,准备在下一篇单独拆开进行分析~

    相关文章

      网友评论

          本文标题:Drawable简单分析

          本文链接:https://www.haomeiwen.com/subject/rcxicxtx.html