Android自定义漂亮的圆形进度条
发布时间 - 2026-01-10 22:31:03 点击率:次这几天对Android中实现画圆弧及圆弧效果中所实现的效果进行了修改,改为进度圆心进度条,效果如图所示
TasksCompletedView.java 代码如下
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Paint.FontMetrics;
import android.util.AttributeSet;
import android.view.View;
import com.snailws.taskscompleted.R;
/**
* @author naiyu(http://snailws.com)
* @version 1.0
*/
public class TasksCompletedView extends View {
// 画实心圆的画笔
private Paint mCirclePaint;
// 画圆环的画笔
private Paint mRingPaint;
// 画字体的画笔
private Paint mTextPaint;
// 圆形颜色
private int mCircleColor;
// 圆环颜色
private int mRingColor;
// 半径
private float mRadius;
// 圆环半径
private float mRingRadius;
// 圆环宽度
private float mStrokeWidth;
// 圆心x坐标
private int mXCenter;
// 圆心y坐标
private int mYCenter;
// 字的长度
private float mTxtWidth;
// 字的高度
private float mTxtHeight;
// 总进度
private int mTotalProgress = 100;
// 当前进度
private int mProgress;
public TasksCompletedView(Context context, AttributeSet attrs) {
super(context, attrs);
// 获取自定义的属性
initAttrs(context, attrs);
initVariable();
}
private void initAttrs(Context context, AttributeSet attrs) {
TypedArray typeArray = context.getTheme().obtainStyledAttributes(attrs,
R.styleable.TasksCompletedView, 0, 0);
mRadius = typeArray.getDimension(R.styleable.TasksCompletedView_radius, 80);
mStrokeWidth = typeArray.getDimension(R.styleable.TasksCompletedView_strokeWidth, 10);
mCircleColor = typeArray.getColor(R.styleable.TasksCompletedView_circleColor, 0xFFFFFFFF);
mRingColor = typeArray.getColor(R.styleable.TasksCompletedView_ringColor, 0xFFFFFFFF);
mRingRadius = mRadius + mStrokeWidth / 2;
}
private void initVariable() {
mCirclePaint = new Paint();
mCirclePaint.setAntiAlias(true);
mCirclePaint.setColor(mCircleColor);
mCirclePaint.setStyle(Paint.Style.FILL);
mRingPaint = new Paint();
mRingPaint.setAntiAlias(true);
mRingPaint.setColor(mRingColor);
mRingPaint.setStyle(Paint.Style.STROKE);
mRingPaint.setStrokeWidth(mStrokeWidth);
mTextPaint = new Paint();
mTextPaint.setAntiAlias(true);
mTextPaint.setStyle(Paint.Style.FILL);
mTextPaint.setARGB(255, 255, 255, 255);
mTextPaint.setTextSize(mRadius / 2);
FontMetrics fm = mTextPaint.getFontMetrics();
mTxtHeight = (int) Math.ceil(fm.descent - fm.ascent);
}
@Override
protected void onDraw(Canvas canvas) {
mXCenter = getWidth() / 2;
mYCenter = getHeight() / 2;
canvas.drawCircle(mXCenter, mYCenter, mRadius, mCirclePaint);
if (mProgress > 0 ) {
RectF oval = new RectF();
oval.left = (mXCenter - mRingRadius);
oval.top = (mYCenter - mRingRadius);
oval.right = mRingRadius * 2 + (mXCenter - mRingRadius);
oval.bottom = mRingRadius * 2 + (mYCenter - mRingRadius);
canvas.drawArc(oval, -90, ((float)mProgress / mTotalProgress) * 360, false, mRingPaint); //
// canvas.drawCircle(mXCenter, mYCenter, mRadius + mStrokeWidth / 2, mRingPaint);
String txt = mProgress + "%";
mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());
canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter + mTxtHeight / 4, mTextPaint);
}
}
public void setProgress(int progress) {
mProgress = progress;
// invalidate();
postInvalidate();
}
}
attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TasksCompletedView">
<attr name="radius" format="dimension"/>
<attr name="strokeWidth" format="dimension"/>
<attr name="circleColor" format="color"/>
<attr name="ringColor" format="color"/>
</declare-styleable>
</resources>
源码下载:http://xiazai./201701/yuanma/AndroidCompleted().rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 进度条
# Android自定义控件实现带数值和动画的圆形进度条
# Android编程之ProgressBar圆形进度条颜色设置方法
# Android三种方式实现ProgressBar自定义圆形进度条
# Android带进度的圆形进度条
# 自定义Android圆形进度条(附源码)
# Android使用Canvas绘制圆形进度条效果
# Android studio圆形进度条 百分数跟随变化
# Android自定义控件实现圆形进度条
# Android自定义View之圆形进度条式按钮
# Android自定义控件实现带文本与数字的圆形进度条
# 自定义
# 这几天
# 大家多多
# 进行了
# 源码下载
# 如图所示
# float
# mRadius
# mRingColor
# mCircleColor
# mXCenter
# mYCenter
# mRingRadius
# mStrokeWidth
# extends
# private
# public
# mTextPaint
# int
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Bootstrap整体框架之CSS12栅格系统
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
微信小程序 闭包写法详细介绍
Mybatis 中的insertOrUpdate操作
Bootstrap整体框架之JavaScript插件架构
EditPlus中的正则表达式 实战(4)
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
免费视频制作网站,更新又快又好的免费电影网站?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
如何用美橙互联一键搭建多站合一网站?
Laravel如何使用Blade模板引擎?(完整语法和示例)
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
高防服务器:AI智能防御DDoS攻击与数据安全保障
详解Android中Activity的四大启动模式实验简述
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Windows Hello人脸识别突然无法使用
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
无锡营销型网站制作公司,无锡网选车牌流程?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
,在苏州找工作,上哪个网站比较好?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
如何为不同团队 ID 动态生成多个非值班状态按钮
网站优化排名时,需要考虑哪些问题呢?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
大型企业网站制作流程,做网站需要注册公司吗?
大同网页,大同瑞慈医院官网?
Laravel如何使用Livewire构建动态组件?(入门代码)
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
如何破解联通资金短缺导致的基站建设难题?
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
PythonWeb开发入门教程_Flask快速构建Web应用
Android 常见的图片加载框架详细介绍
进行网站优化必须要坚持的四大原则
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
C++用Dijkstra(迪杰斯特拉)算法求最短路径
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何快速搭建虚拟主机网站?新手必看指南
如何快速搭建个人网站并优化SEO?
使用C语言编写圣诞表白程序
Laravel如何生成URL和重定向?(路由助手函数)
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】

