水波纹进度条(自定义View——进阶篇1)
来源:互联网 发布:淘宝客订单一直失效 编辑:程序博客网 时间:2024/05/18 02:58
自定义控件——ProgressCircleView(水波纹进度条)
最近在很多群都有提到水波纹进度条,看起来蛮唬人的,但是我们要相信毛爷爷的话,一切看起来唬人的都是纸老唬,一言不合,还是先贴效果图:
这个效果该怎么实现呢,今天还是讲思路,思路从图开始,接下来的这张图是我呕心沥血之作,帮助大家分分钟找到解决方案,所以再丑你们也不要嫌弃,上图:
看到这里,我也感觉画风不对,不过重要的还是思想,以后会慢慢改进:
看到没,就这么简单,水波纹部分不正是 圆 和 贝塞尔曲线 + 左右下边距 形成图案的交集部分么,搜噶斯内,到这里所有的问题都已不是问题,当然可能很多人可能只听过贝塞尔曲线,不过不了解到底是个啥玩意,感觉蛮叼的样子,我来给大家稍稍介绍下:
这里是二阶贝塞尔曲线,多阶就不介绍了,免得跑题了。
工具类,二阶贝塞尔曲线绘制:path.rQuadTo(dx1, dy1, dx2, dy2);P0为起点坐标,方法中的参数对应P1和P2的坐标点。
方法介绍了,该是贴代码的时候了,为了方便大家理解,我这里分别从左至右、从右至左绘制了贝塞尔曲线,不过视觉效果上似乎没差别:
/** * @param direction 0从左至右,1从右至左(绘制) */ private void drawQuad(int direction) { //绘制进度波纹 path.reset(); //计算画笔所在的Y坐标值,直径 - 进度移动距离 float py = (1 - (float) currentProgress / maxProgress) * 2 * radius; switch (direction) { case 0: //x轴不变,向Y轴方向移动画笔(这里为向上) path.moveTo(0, py); //默认水波纹半径 float pRadius = 2f * radius / progressDensity;//progressDensity为水波纹的密度 //水波纹当前半径 float cRadius = (1 - (float) currentProgress / maxProgress) * pRadius; for (int i = 0; i < progressDensity; i++) { //这里是在一条直线上绘制的是上下循环的贝塞尔曲线 //下曲线,这里可以去掉,但不去掉会更美观 path.rQuadTo(pRadius, cRadius, 2 * pRadius, 0);//绘制贝塞尔曲线,每次绘制相对上一条的位置开始 //上曲线 path.rQuadTo(pRadius, -cRadius, 2 * pRadius, 0); } path.lineTo(width, py); path.lineTo(width, heigth); path.lineTo(0, heigth); break; case 1: //x轴不变,向Y轴方向移动画笔(这里为向上) path.moveTo(width, py); //默认水波纹半径 float pRadius1 = 2f * radius / progressDensity;//progressDensity为水波纹的密度 //水波纹当前半径 float cRadius1 = (1 - (float) currentProgress / maxProgress) * pRadius1; for (int i = 0; i < progressDensity; i++) { //这里是在一条直线上绘制的是上下循环的贝塞尔曲线 //下曲线,这里可以去掉,但不去掉会更美观 path.rQuadTo(-pRadius1, cRadius1, -2 * pRadius1, 0);//绘制贝塞尔曲线,每次绘制相对上一条的位置开始 //上曲线 path.rQuadTo(-pRadius1, -cRadius1, -2 * pRadius1, 0); } path.lineTo(0, heigth); path.lineTo(width, heigth); path.lineTo(width, py); break; default: break; } path.close(); bitmapCanvas.drawPath(path, progressPaint); }说到了,就该结束了,如果你只想当搬运工,我也很善解人意的提供源码:
ProgressCircleView
1 0
- 水波纹进度条(自定义View——进阶篇1)
- 自定义View——水波纹倒影
- 【Android】自定义View —— 水波纹
- 自定义View实现圆形水波进度条(上)
- 自定义View实现圆形水波进度条(下)
- 自定义View实现圆形水波进度条
- 自定义水波纹View
- 自定义view水波纹
- 开发流量球SDK之自定义view(流量球)上篇 — 水波纹(波浪线)
- 自定义水波纹的View
- 自定义圆形水波纹View
- Android 水波纹自定义 View
- Android自定义控件之自定义View(三)——自定义水波纹
- 4.4.1 Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- Android开发-自定义View-AndroidStudio(十七)自定义水波纹(1)
- 安卓通过自定义view实现水波进度条控件
- <Android 进阶(一)> 自定义View之仪表盘进度条
- android 进阶之路-自定义view-水波纹进度球
- 【C++心路历程6】打表大法好 素数没烦恼
- 214. Shortest Palindrome
- mysql服务器查询慢原因分析方法
- GSON学习总结
- 赛马网基本算法之--约德尔测试
- 水波纹进度条(自定义View——进阶篇1)
- 网络编程
- [USACO08OCT]Watering Hole
- Java基础问题记录(菜鸟记录,勿喷)
- 创建一个新闻客户端
- Servlet入门介绍第一章——认识Servlet
- MySQL中锁详解(行锁、表锁、页锁、悲观锁、乐观锁等)
- C++学习随笔(二)——引用
- 实用CSS3实现旋转加载中动画