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


相关推荐: 青岛网站建设如何选择本地服务器?  JS实现鼠标移上去显示图片或微信二维码  如何彻底卸载建站之星软件?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  如何快速打造个性化非模板自助建站?  如何在IIS中配置站点IP、端口及主机头?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何利用DOS批处理实现定时关机操作详解  如何在建站之星网店版论坛获取技术支持?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  实例解析Array和String方法  微信小程序 闭包写法详细介绍  Laravel怎么调用外部API_Laravel Http Client客户端使用  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  如何用腾讯建站主机快速创建免费网站?  Python文件流缓冲机制_IO性能解析【教程】  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  香港服务器部署网站为何提示未备案?  如何生成腾讯云建站专用兑换码?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel如何使用Blade模板引擎?(完整语法和示例)  EditPlus中的正则表达式 实战(1)  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何构建满足综合性能需求的优质建站方案?  Python图片处理进阶教程_Pillow滤镜与图像增强  如何解决hover在ie6中的兼容性问题  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  JavaScript常见的五种数组去重的方式  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  黑客入侵网站服务器的常见手法有哪些?  Laravel如何为API编写文档_Laravel API文档生成与维护方法  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  详解阿里云nginx服务器多站点的配置  魔毅自助建站系统:模板定制与SEO优化一键生成指南  网站制作壁纸教程视频,电脑壁纸网站?  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  如何快速重置建站主机并恢复默认配置?  如何在云主机上快速搭建网站?  如何用景安虚拟主机手机版绑定域名建站?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  JavaScript实现Fly Bird小游戏