Android动态自定义圆形进度条

发布时间 - 2026-01-10 23:22:59    点击率:

效果图:

A.绘制圆环,圆弧,文本

//1.画圆环
//原点坐标
float circleX = width / 2;
float circleY = width / 2;
//半径
float radius = width / 2 - roundWidth / 2;
//设置画笔的属性
paint.setColor(roundColor);
paint.setStrokeWidth(roundWidth);
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(circleX, circleY, radius, paint);
//2.画圆弧
RectF oval = new RectF(roundWidth/2,roundWidth/2,width-roundWidth/2,width - roundWidth/2);
paint.setColor(roundProgressColor);
canvas.drawArc(oval, 0, progress * 360 / max, false, paint);
//3.画文本
paint.setTextSize(textSize);
paint.setColor(textColor);
paint.setStrokeWidth(0);
String text = progress * 100 / max + "%";
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
canvas.drawText(text, width / 2 - bounds.width() / 2, width / 2 + bounds.height() / 2, paint);

B.自定义属性的具体步骤

具体步骤:

1. 定义属性: 在values目录下创建attrs.xml

<declare-styleable name="RoundProgress">
 <attr name="roundColor" format="color"></attr>
 <attr name="roundProgressColor" format="color"></attr>
 <attr name="textColor" format="color"></attr>
 <attr name="roundWidth" format="dimension"></attr>
 <attr name="textSize" format="dimension"></attr>
</declare-styleable>

2. 在布局文件中引用当前应用的名称空间

xmlns:atguigu=http://schemas.android.com/apk/res-auto

3. 在自定义视图标签中使用自定义属性

<com.atguigu.p2p.util.RoundProgress
  android:id="@+id/rp_home_progress"
  android:layout_width="120dp"
  android:layout_height="120dp"
  android:layout_gravity="center_horizontal"
  android:layout_marginTop="20dp"
  atguigu:roundColor="@android:color/darker_gray         <br>  atguigu:roundProgressColor="@android:color/holo_red_dark"
  atguigu:textColor="@color/text_progress"
  atguigu:roundWidth="10dp"
  atguigu:textSize="20sp"
  /> 

4. 在自定义View类的构造方法中, 取出布局中的自定义属性值

//1.得到所有自定义属性的数组
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundProgress);
//2.获取自定义属性的值, 如果没有指定取默认值
roundColor = typedArray.getColor(R.styleable.RoundProgress_roundColor, Color.RED);
roundProgressColor = typedArray.getColor(R.styleable.RoundProgress_roundProgressColor, Color.GREEN);
textColor = typedArray.getColor(R.styleable.RoundProgress_textColor, Color.GREEN);
roundWidth = typedArray.getDimension(R.styleable.RoundProgress_roundWidth, UIUtils.dp2px(10));
textSize = typedArray.getDimension(R.styleable.RoundProgress_textSize, UIUtils.dp2px(20));
//3.释放资源数据
typedArray.recycle();

C.让圆环进度"动起来"

1.自定义RoundProgress类中提供进度属性的getter和setter方法

2.在HomeFragment的onSuccess()中:

 github:https://github.com/ganchuanpu/P2PInvest

以上所述是小编给大家介绍的Android动态自定义圆形进度条,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# android  # 自定义圆形进度条  # 圆形进度条  # Android自定义圆形进度条效果  # Android自定义圆形进度条  # Android 实现自定义圆形进度条的实例代码  # Android 实现自定义圆形进度条的功能  # Android实现自定义圆形进度条  # Android三种方式实现ProgressBar自定义圆形进度条  # Android 实现自定义圆形进度条的三种常用方法  # 自定义  # 小编  # 在此  # 给大家  # 如果没有  # 所述  # 给我留言  # 感谢大家  # 默认值  # 类中  # 疑问请  # 有任何  # 进度条  # 目录下  # textColor  # String  # setTextSize  # textSize  # false  # drawArc 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 北京网站制作的公司有哪些,北京白云观官方网站?  韩国服务器如何优化跨境访问实现高效连接?  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何确认建站备案号应放置的具体位置?  如何在阿里云ECS服务器部署织梦CMS网站?  高性价比服务器租赁——企业级配置与24小时运维服务  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  海南网站制作公司有哪些,海口网是哪家的?  Laravel如何实现数据库事务?(DB Facade示例)  如何在 Pandas 中基于一列条件计算另一列的分组均值  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何在阿里云虚拟主机上快速搭建个人网站?  音响网站制作视频教程,隆霸音响官方网站?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Laravel如何处理异常和错误?(Handler示例)  如何在云指建站中生成FTP站点?  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  如何获取上海专业网站定制建站电话?  Laravel如何自定义错误页面(404, 500)?(代码示例)  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  装修招标网站设计制作流程,装修招标流程?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Linux系统运维自动化项目教程_Ansible批量管理实战  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  jquery插件bootstrapValidator表单验证详解  Linux网络带宽限制_tc配置实践解析【教程】  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  javascript基于原型链的继承及call和apply函数用法分析  UC浏览器如何设置启动页 UC浏览器启动页设置方法  android nfc常用标签读取总结  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  如何用美橙互联一键搭建多站合一网站?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  网站制作大概要多少钱一个,做一个平台网站大概多少钱?