博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个有趣的android加载动画
阅读量:6079 次
发布时间:2019-06-20

本文共 2710 字,大约阅读时间需要 9 分钟。

前言

之前学习canvas画图的时候,写了一个Android的加载动画,代码托管在github上面。

这里是github的地址:

下面先附上实际运行的效果图。

图片描述

主要的工作思路

需要绘制这样的动画,首先要学习Canvas的一些基本知识,这里我就不一一介绍了,推荐一个大神的教程,讲解的非常好。

这里是连接:

这里要说一下,在没有现成的View,需要自己实现的时候,就使用自定义View,一般继承自View,SurfaceView或其他的View,不包含子View。一般的情况下,我们要下面几个函数,构造函数,测量View大小(onMeasure),确定View大小(onSizeChanged),确定子View布局位置(onLayout),绘制内容(onDraw),最后在对外提供操作方法和监听回调。

这个loading主要分为下面几个部分:

1、精度框的绘制,随着进度的增加,内部的进度需要,向前填充。

但是,要注意,在左边的部分是分为,上半弧,矩形,下半弧,组成,中间就是一个矩形,在右边同理,有上半弧,矩形,下半弧。下面详细分析的图。

这里是进度框的分割图

下面是绘制左边的的代码

private void drawLeft(Canvas canvas,int mCurrentProgressPosition) {        initPaint();        mPaint.setColor(BLUE_COLOR);        mPaint.setStyle(Paint.Style.FILL);        int height = (int) Math.sqrt(900-(30-mCurrentProgressPosition)*(30-mCurrentProgressPosition));        //上圆弧        RectF rectUP = new RectF();        rectUP.left = 200;        rectUP.top = mTotalHeight/2 + 135 - height;        rectUP.right = 2 * mCurrentProgressPosition + 200;        rectUP.bottom = mTotalHeight/2 + 125 + height;        canvas.drawArc(rectUP, 180, 90, true, mPaint);        //中部        RectF mRect = new RectF();        mRect.left = 200;        mRect.top = mTotalHeight/2 + 130;        mRect.right = mCurrentProgressPosition + 200;        mRect.bottom = mTotalHeight/2 + 170;        canvas.drawRect(mRect, mPaint);        //下圆弧        RectF rectDown = new RectF();        rectDown.left = 200;        rectDown.top = mTotalHeight/2 + 175 - height;        rectDown.right = 2 * mCurrentProgressPosition + 200;        rectDown.bottom = mTotalHeight/2 + 165 + height;        canvas.drawArc(rectDown, 90, 90, true, mPaint);    }

2、云彩的动态效果

详细见代码

3、烟圈的动态效果

主要绘制一个椭圆,然后随着进度的增加,椭圆向上运动,同时要渐渐地变大。

4、房子的波浪显示效果,这里要考虑到试用Path()路径绘图,贝塞尔曲线的绘制。

首先,绘制房子,然后,通过Path()路径,绘制贝叶斯曲线,渐进波浪显示房子的整体效果。

/**     * 波浪显示     * @param canvas     * @param width    波浪的宽度     * @param length   波浪的高度     * @param left     波浪的左起点     * @param top      波浪的上顶点     */    private void setPath(Canvas canvas,int width,int length,int left,int top){        Path path = new Path();        path.reset();        int x,y;        int a = 12;//振幅        for (int i = mProgress; i < width + mProgress ; i++) {            x = left + i- mProgress;            y = (int) (a * Math.sin(i * Math.PI / 50) + length + top);            if (i == mProgress) {                path.moveTo(x, y);            }            path.quadTo(x, y, x + 1, y);        }        path.lineTo(left + width, top);        path.lineTo(left, top);        path.close();        Paint wavePaint = new Paint();        wavePaint.setStyle(Paint.Style.FILL);        wavePaint.setAntiAlias(true);        wavePaint.setColor(ORANGE_COLOR);        canvas.drawPath(path, wavePaint);    }

先写这么多,下次继续补全。欢迎到github帮我star。

附:Canvas的常用操作速查表

图片描述

转载地址:http://xcagx.baihongyu.com/

你可能感兴趣的文章
使用libsvm进行文本分类
查看>>
Windows server 2003到Windows server 2008 R2的迁移本地升级
查看>>
项目中应用eventbus解决的问题
查看>>
Android中使用Sqlite数据库 (一) 建表
查看>>
2-05 使用固态存储SSD或PCIe卡
查看>>
【转】如何在LINUX中安装下载到的软件
查看>>
随机密码生成工具
查看>>
Java解析XML的方法(Dom4j生成和解析XML)
查看>>
苹果供应链的秘密
查看>>
windows镜像EI.CFG文件
查看>>
5 种使用 Python 代码轻松实现数据可视化的方法
查看>>
触摸屏笔记本回顾 - 惠普TX2000
查看>>
configure: error: xml2-config not found. Please ch
查看>>
Xenserver6.2安装文档(图文详解)
查看>>
IntelHaxm加速器引起的Win8.1蓝屏及解决方法
查看>>
实用PowerPoint文档和模板操作技巧
查看>>
openstack-mitaka基础环境介绍
查看>>
Apache顶级项目介绍2-Kafka
查看>>
POI操作Excel常用方法总结
查看>>
Android:×××
查看>>