Android怎么自定义View实现横向的双水波纹进度条
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关Android怎么自定义View实现横向的双水波纹进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。思路分析整体效果可分为三个,绘制圆
千家信息网最后更新 2026年11月03日Android怎么自定义View实现横向的双水波纹进度条思路分析
功能实现
1.绘制圆角背景和圆角矩形边框
2.通过贝塞尔曲线实现双水波
3.设置动画使进度和水波纹变化
这篇文章将为大家详细讲解有关Android怎么自定义View实现横向的双水波纹进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
思路分析
整体效果可分为三个,绘制圆角背景和圆角矩形,绘制第一条和第二条水波浪,根据自定义进度变化效果。
功能实现
1.绘制圆角背景和圆角矩形边框
圆角矩形边框:
private RectF rectBorder;if (rectBorder == null) { rectBorder = new RectF(0.5f * dp1, 0.5f * dp1, waveActualSizeWidth - 0.5f * dp1, waveActualSizeHeight - 0.5f * dp1);}canvas.drawRoundRect(rectBorder, dp27, dp27, borderPaint);我们创建一个新的画布,然后在画布里画上圆角矩形背景和第一条和第二条水波浪:
//这里用到了缓存 根据参数创建新位图if (circleBitmap == null) { circleBitmap = Bitmap.createBitmap(waveActualSizeWidth, waveActualSizeHeight, Bitmap.Config.ARGB_8888);}//以该bitmap为底创建一块画布if (bitmapCanvas == null) { bitmapCanvas = new Canvas(circleBitmap);}// 圆角矩形背景,为了能让波浪填充完整个圆形背景if (rectBg == null) { rectBg = new RectF(0, 0, waveActualSizeWidth, waveActualSizeHeight);}bitmapCanvas.drawRoundRect(rectBg, dp27, dp27, backgroundPaint);//裁剪图片canvas.drawBitmap(circleBitmap, 0, 0, null);2.通过贝塞尔曲线实现双水波
1)实现第一条水波
/** * 绘制波浪线 */private Path canvasWavePath() { //要先清掉路线 wavePath.reset(); //起始点移至(0,0) p0 -p1 的高度随着进度的变化而变化 wavePath.moveTo((currentPercent) * waveActualSizeWidth, -moveDistance); //最多能绘制多少个波浪 //其实也可以用 i < getWidth() ;i+=waveLength来判断 这个没那么完美 //绘制p0 - p1 绘制波浪线 这里有一段是超出View的,在View右边距的右边 所以是* 2 for (int i = 0; i < waveNumber * 2; i++) { wavePath.rQuadTo(waveHeight, waveLength / 2, 0, waveLength); wavePath.rQuadTo(-waveHeight, waveLength / 2, 0, waveLength); } //连接p1 - p2 wavePath.lineTo(0, waveActualSizeHeight); //连接p2 - p0 wavePath.lineTo(0, 0); //封闭起来填充 wavePath.close(); return wavePath;}moveDistance为水波垂直方向移动的距离。
waveLength为水波长度,一个上弧加一个下弧为一个波长。
path的起始点为(0,0)可根据进度动态改变,然后循环画曲线,长度是有几个波浪就是多长,然后连接到view高度的位置,最后到(0,0),形成一个封闭的区域,这样就实现了一个填充的水波效果。
2)绘制第二条水波,第二条水波和第一条类似,只是起始点变了:
/** * 绘制第二层波浪 */private Path canvasSecondPath() { secondWavePath.reset(); //初始点移动到下方 secondWavePath.moveTo((currentPercent) * waveActualSizeWidth, waveActualSizeHeight + moveDistance); for (int i = 0; i < waveNumber * 2; i++) { secondWavePath.rQuadTo(waveHeight, -waveLength / 2, 0, -waveLength); secondWavePath.rQuadTo(-waveHeight, -waveLength / 2, 0, -waveLength); } secondWavePath.lineTo(0, 0); secondWavePath.lineTo(0, waveActualSizeHeight); secondWavePath.close(); return secondWavePath;}3.设置动画使进度和水波纹变化
/** * 设置进度 * * @param currentProgress 进度 * @param duration 达到进度需要的时间 */public void setProgress(int currentProgress, long duration, AnimatorListenerAdapter listenerAdapter) { float percent = currentProgress * 1f / maxProgress; this.currentProgress = currentProgress; //从0开始变化 currentPercent = 0; moveDistance = 0; mProgressAnimator = ValueAnimator.ofFloat(0, percent); //设置动画时间 mProgressAnimator.setDuration(duration); //让动画匀速播放,避免出现波浪平移停顿的现象 mProgressAnimator.setInterpolator(new LinearInterpolator()); mProgressAnimator.addUpdateListener(listener); mProgressAnimator.addListener(listenerAdapter); mProgressAnimator.start(); // 波浪线 startWaveAnimal();}/** * 波浪动画 */private void startWaveAnimal() { //动画实例化 if (waveProgressAnimator == null) { waveProgressAnimator = new WaveProgressAnimal(); //设置动画时间 waveProgressAnimator.setDuration(2000); //设置循环播放 waveProgressAnimator.setRepeatCount(Animation.INFINITE); //让动画匀速播放,避免出现波浪平移停顿的现象 waveProgressAnimator.setInterpolator(new LinearInterpolator()); //当前视图开启动画 this.startAnimation(waveProgressAnimator); }}其中波浪动画是通过改变moveDistance的值改变纵坐标达到,进度主要是通过改变百分比currentPercent改变波浪的横坐标达到。
关于"Android怎么自定义View实现横向的双水波纹进度条"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
波浪
进度
动画
圆角
水波
矩形
背景
变化
波纹
效果
时间
画布
篇文章
起始
横向
右边
曲线
更多
现象
边框
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技图片
百单网互联网科技有限公司怎么样
互联网科技社
港股互联网科技股
关于新基建和互联网科技
互联网 的科技创新
互联网科技革命
互联网科技排名
广州凡科互联网科技
成都玖崟互联网科技有限公司乐商圈怎么样
以后互联网后是啥科技
阿里互联网科技公司
重庆互联网医院沙龙医盟信息科技
赶超互联网科技 微信多开
恒生互联网科技指数跳水
洛阳昕诺飞互联网科技有限公司
工业互联网等科技实现智能化赋能
2021互联网科技公司排名
科技互联网行业投资研究
杭州科技互联网公司有哪些
咖啡
深圳科技互联网
广州互联网科技公司
锡山区互联网智能科技产品供应
黑科技 体验场景 互联网大会
深圳无忧互联网科技
工业互联网科技创业
北京天晋互联网科技有限公司
山东蛋芒互联网科技有限公司
利用互联网等科技手段