Android自定义drawable-----各种各样的Loading效果

image
image.gif

接着我们上一年的博眼球的主题,接下来的这篇我们仍然以UI效果为题开展主题推送,相信小伙伴们或多或少都做过App开发,App中最常见的一类UI效果,自然就是各种各样的Loading了,这篇文章我们就以Loading入手,介绍一种加载动画的思路,废话不多,直接进入正题。

image
image.gif

以上图为例,要实现一个动画,我们首先应该观察,在整个动画过程中,那些是变化的,那些是静止的,从而考虑策略,进行实现。仔细观察不难看出,这是一个圆弧以圆心为中心旋转所构成的动画。由此我们可以看出,在该动画中圆弧的弧度是没有变化的,只是绘制圆弧后,画布在旋转,这样我们就可以实现该动画效果

完整代码如下:

    public class RingRotateDrawable extends Drawable {
    private Paint mArcPaint;
    private int mRotate;

    public static final String KEY_ROTATE = "ROTATE";

    private ValueAnimator mValueAnimator;

    public RingRotateDrawable(int color) {
        super();
        mArcPaint = new Paint();
        mArcPaint.setColor(color);
        mArcPaint.setStrokeWidth(10);
        mArcPaint.setStyle(Paint.Style.STROKE);
    }

    @Override
    public void draw(@NonNull Canvas canvas) {
        canvas.rotate(mRotate,getBounds().left+getBounds().width()/2,getBounds().top+getBounds().height()/2);
        RectF rectF = new RectF(getBounds().left+10,getBounds().top+10,getBounds().right-10,getBounds().bottom-10);
        canvas.drawArc(rectF, 0, 330, false, mArcPaint);
    }

    @Override
    public void setAlpha(int alpha) {

    }

    @Override
    public void setColorFilter(@Nullable ColorFilter colorFilter) {

    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }

    public void start() {
        PropertyValuesHolder mPropertyRotate = PropertyValuesHolder.ofInt(KEY_ROTATE, 0, 360);
        mValueAnimator = new ValueAnimator();

        mValueAnimator.setValues(mPropertyRotate);
        mValueAnimator.setDuration(1000);
        mValueAnimator.setRepeatMode(ValueAnimator.RESTART);
        mValueAnimator.setRepeatCount(1000);
        mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                mRotate = (int) animation.getAnimatedValue(KEY_ROTATE);
                invalidateSelf();
            }
        });
        mValueAnimator.start();
    }
}

image.gif

根据上述原理,我们还可以实现如下花式Loading,大家自行尝试下吧。

image
image.gif

[PS:简单的摆了一下,布局随便拖的,凑合看!]

image
image.gif

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,038评论 3 119
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,196评论 4 61
  • 尽秀山河迎春风, 依山傍水闻水嘣。 原是山清不得志, 确是清泉石上流。
    清新之雨阅读 1,020评论 0 1
  • 01 我叫安冬,冬天的冬。我是一名摄影师。 我喜欢旅游,什么都不带,就带着我的相机,我喜欢把每一帧回忆都呈现在我的...
    林桐淮阅读 4,685评论 13 13
  • 今天整理了一下歌单,找出了几首最近的单曲循环,这些歌的调子都比较舒缓,不去听歌词的话,应该是属于治愈系的。希望最近...
    翻身中的阿孙阅读 4,470评论 0 4