- 动画控制, 动画效果可以设置展示速度, 总有一个组合适合你
设计过程
将相关的view分为了四层, 从下至上分别为
- 背景图层
用于显示整个view的背景
- 进度图层
相当于进度条的背景颜色
- 线段动画图层
在这里绘制出现的线段, 并控制器动画的效果
- 遮罩展示图层
这里使用了遮罩展示的方法, 控制遮罩图层的进度和样式来表现实际的展示效果
实现过程
首先是背景如果绘制的, 简单来说就是两个圆形和一个矩形, 具体的动画效果可以参考下面,
其它的图层基本上也都是比较类似的情况, 除此之外就是线条的实现
其中中心黑色的为展示的区域, 白色的是绘制的区域
代码实现
可编辑参数
//下面为可自定义编辑的参数
//背景颜色
private int viewBackGroundColor;
//线条颜色
private int viewLineColor;
//进度条颜色
private int viewProgressColor;
//线条见间隔
private int offsetLine;
//执行动画需要的时间
private int animatorTime;
//进度变化动画需要的时间
private int animatorProgressTime;
//画笔/线条的宽度
private int paintWidth;
背景图层&绘制图层背景
这两个图形的实现比较类似
/**
- @description 绘制图层背景
*/
private void getProgressBackground(Canvas canvas){
//设置画笔
Paint paint = new Paint();
paint.setColor(viewProgressColor);
//确定两个圆形的中心位置及半径
int leftCirclePoint = height / 2;
int rightCirclePoint = width - leftCirclePoint;
int radius = height / 2;
//绘制左侧和右侧的圆形填充
canvas.drawCircle(leftCirclePoint, height >> 1, radius, paint);
canvas.drawCircle(rightCirclePoint, height >> 1, radius, paint);
//绘制中心的矩形填充
Rect rect = new Rect(leftCirclePoint, 0, rightCirclePoint, height);
canvas.drawRect(rect, paint);
}
/**
- @description 绘制背景图层
*/
private void drawViewBackground(Canvas canvas) {
canvas.save();
Paint paint = new Paint();
paint.setColor(viewBackGroundColor);
int leftCirclePoint = height / 2;
int rightCirclePoint = width - leftCirclePoint;
int radius = height / 2;
canvas.drawCircle(leftCirclePoint, height >> 1, radius, paint);
canvas.drawCircle(rightCirclePoint, height >> 1, radius, paint);
Rect rect = new Rect(leftCirclePoint, 0, rightCirclePoint, height);
canvas.drawRect(rect, paint);
}
绘制遮罩图层
/**
- @description 绘制遮罩图层
*/
private Bitmap progressBitmapDst(){
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
//如果当前进度为0, 则不展示任何内容
if (progress == 0){
return bitmap;
}
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
//遮罩图层宽度与当前progress进度有关
int leftCirclePoint = height / 2;
int rightCirclePoint = leftCirclePoint + (int) ((width - height) / 1f * progress / 100f);
int radius = height / 2;
canvas.drawCircle(leftCirclePoint, height >> 1, radius, paint);
canvas.drawCircle(rightCirclePoint, height >> 1, radius, paint);
Rect rect = new Rect(leftCirclePoint, 0, rightCirclePoint, height);
canvas.drawRect(rect, paint);
return bitmap;
}
绘制线条动画
/**
- @description 绘制线条动画
*/
private void getProgressLines(Canvas canvas){
Paint paint = new Paint();
paint.setColor(viewLineColor);
//设置画笔宽度
paint.setStrokeWidth(paintWidth);
//设置画笔圆形边界
paint.setStrokeCap(Paint.Cap.ROUND);
//todo 动画效果展示优化
canvas.translate(-offsetLine * 2, 0);
//offsetAnimator 为动画展示时使用, 每次移动一定的长度,
//通过连续的移动来实现视觉上的动画效果
canvas.translate(offsetAnimator, 0);
canvas.save();
int indexOffset = 0;
//依次绘制线条
do {
//绘制右上到左下的线条
canvas.drawLine(20, -20, -offsetLine - 20, height + 20, paint);
indexOffset += offsetLine;
//偏移位置
canvas.translate(offsetLine, 0);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/4589525225951140de567d9a91cb1ad2.jpeg)
结尾
如何才能让我们在面试中对答如流呢?
答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?为此我整理了一份Android学习资料路线:
这里是一份BAT大厂面试资料专题包:
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!