超简单的Android圆形进度条

效果图:

代码优化/简化、教科书级别注释、复制粘贴即可用

代码:

package com.zistone.factorytest0718.view;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;import com.zistone.factorytest0718.BaseActivity;/*** 圆形进度条控件** @author LiWei* @date 2021/2/19 16:17* @email 652276536@qq.com*/
public class MyCircleProgress extends View {private static final String TAG = "MyCircleProgress";private Paint _paint;private RectF _rectF;private Rect _rect;private int _current = 1, _max = 100;//圆弧(也可以说是圆环)的宽度private float _arcWidth = 30;//控件的宽度private float _width;public MyCircleProgress(Context context) {this(context, null);}public MyCircleProgress(Context context, AttributeSet attrs) {this(context, attrs, 0);}public MyCircleProgress(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);_paint = new Paint();_paint.setAntiAlias(true);_rectF = new RectF();_rect = new Rect();}public void SetCurrent(int _current) {Log.i(TAG, "当前值:" + _current + ",最大值:" + _max);this._current = _current;invalidate();}public void SetMax(int _max) {this._max = _max;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);//getMeasuredWidth获取的是view的原始大小,也就是xml中配置或者代码中设置的大小//getWidth获取的是view最终显示的大小,这个大小不一定等于原始大小_width = getMeasuredWidth();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//绘制圆形//设置为空心圆,如果不理解绘制弧线是什么意思就把这里的属性改为“填充”,跑一下瞬间就明白了_paint.setStyle(Paint.Style.STROKE);//设置圆弧的宽度(圆环的宽度)_paint.setStrokeWidth(_arcWidth);_paint.setColor(Color.GRAY);//大圆的半径float bigCircleRadius = _width / 2;//小圆的半径float smallCircleRadius = bigCircleRadius - _arcWidth;//绘制小圆canvas.drawCircle(bigCircleRadius, bigCircleRadius, smallCircleRadius, _paint);_paint.setColor(BaseActivity.SPRING_GREEN);_rectF.set(_arcWidth, _arcWidth, _width - _arcWidth, _width - _arcWidth);//绘制圆弧canvas.drawArc(_rectF, 90, _current * 360 / _max, false, _paint);//计算百分比String txt = _current * 100 / _max + "%";_paint.setStrokeWidth(0);_paint.setTextSize(40);_paint.getTextBounds(txt, 0, txt.length(), _rect);_paint.setColor(BaseActivity.SPRING_GREEN);//绘制百分比canvas.drawText(txt, bigCircleRadius - _rect.width() / 2, bigCircleRadius + _rect.height() / 2, _paint);}}

调用:

package com.zistone.factorytest0718;import android.os.Bundle;import com.zistone.factorytest0718.view.MyCircleProgress;/*** 用来测试一些东西的,没有任何实际功能...** @author LiWei* @date 2020/7/18 9:33* @email 652276536@qq.com*/
public class Test1Activity extends BaseActivity {private static final String TAG = "Test1Activity";private boolean _threadFlag = false;@Overrideprotected void onDestroy() {_threadFlag = true;super.onDestroy();}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test1);MyCircleProgress myCircleProgress = findViewById(R.id.控件名);Thread thread = new Thread(() -> {int j = 0;while (!_threadFlag && j < 100) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}j++;int finalJ = j;runOnUiThread(() -> myCircleProgress.SetCurrent(finalJ));}});thread.start();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1383411.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Android 绘制圆形进度条

Android 绘制圆形进度条 最近项目上有一些需求&#xff0c;需要绘制圆形的进度条满足设计上和交互上的需求&#xff1a; 实现思路 在画布上直接绘制View&#xff0c;需要了解一下几点 1.需要画一个圆 2.圆圈上有不同进度的颜色 3.圆圈中有进度数字的展示 4.圆圈中间还…

纯css制作圆形进度条

效果图大概是这样的 第一步 先定义出一个方形盒子 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

实现一个圆形进度条(vue)

实现方式&#xff1a;首先是用svg画两个圆&#xff0c;同圆心同半径的两个圆&#xff0c;然后把颜色都设置成透明&#xff0c;利用圆的边框来实现。给两个圆设置相同的边框宽度&#xff0c;并且设置颜色&#xff08;设置一个透明&#xff0c;一个有颜色&#xff09;&#xff1b…

药都银行冲刺上交所:年营收22.78亿 古井集团是股东

雷递网 雷建平 5月1日 亳州药都农村商业银行股份有限公司&#xff08;简称&#xff1a;“药都银行”&#xff09;日前递交招股书&#xff0c;准备在上交所主板上市。 药都银行计划募资16.38亿元。 年营收22.78亿 药都银行坐落于世界中医药之都——亳州市&#xff0c;于2005年12…

自贸港首家公务机公司海航金鹿商务正式启动运营

日前&#xff0c;海航集团旗下金鹿公务在海口设立公务机总部 -- 金鹿商务航空有限公司&#xff08;简称&#xff1a;金鹿商务&#xff09;&#xff0c;已通过中国民用航空海南安全监督管理局运行审定&#xff0c;取得中国民用航空中南地区管理局颁发的运行规范。4月29日上午9时…

内网通朋友不在线

前段时间使用内网通发现同学老师的总是不在线&#xff0c;有时候改一下IP地址&#xff0c;又可以&#xff0c;后面才发现原来可以自己设置网段地址的 设置过程见下图&#xff1a; 输入老师的IP地址的前三位即可

基于html5在线学生学籍信息管理系统

随着高校人数越来越多&#xff0c;管理高校的学生人数成为难题&#xff0c;如何更好的管理高校的入学人数&#xff1f;通过学籍的管理方式可以很好的将各年级&#xff0c;各个院校&#xff0c;各个专业的学生进行统一的管理&#xff0c;对不同的学生分门别类&#xff0c;学籍管…

爱班级电脑端下载|二维码签到

最近上网课发现爱班级的扫码功能只能在手机上进行&#xff0c;如果手动点到有时候还是会显示我没考勤&#xff0c;那有没有电脑端的爱班级下载呢&#xff1f;搜了很久发现是有的&#xff0c;但是要装个模拟器&#xff1a; 1.下载链接如下&#xff1a; 网盘链接&#xff1a; …

最新升学e网通JS逆向分析

目标网址:https://web.ewt360.com/ 重要说明:文章教程仅供参考学习,请勿用于非法用途,否则后果自负。 目录 1、接口参数分析 2、加密函数分析

2023年中国政务云行业发展概况及发展趋势分析:政务云由基础设施建设向云服务运营转变[图]

政务云是指运用云计算技术&#xff0c;统筹利用已有的机房、计算、存储、网络、安全、应用支撑、信息资源等&#xff0c;发挥云计算虚拟化、高可靠性、高通用性、高可扩展性及快速、按需、弹性服务等特征&#xff0c;为政府行业提供基础设施、支撑软件、应用系统、信息资源、运…

Java+Excel+POI+testNG基于数据驱动做一个简单的接口测试【杭州多测师_王sir】

一、创建一个apicases.xlsx放入到eclipse的resource里面&#xff0c;然后refresh刷新一下 二、在pom.xml文件中加入poi和testng的mvn repository、然后在eclipse的对应目录下放入features和plugins&#xff0c;重启eclipse就可以看到testNG了 <!--poi excel解析 --><d…

【Minecraft】Fabric Mod开发完整流程3 - 配方与挖掘等级

目录 新配方工作台配方无序合成配方有序合成配方 熔炉配方 挖掘等级与掉落物挖掘等级标准等级配置易错点分析 战利品与掉落物普通方块掉落物矿石方块掉落物 新配方 工作台配方 为便于你快速创建配方&#xff0c;可以直接去这个网站上通过拖拽的方式创建属于你的配方表&#xf…

V4L2-框架

1.概述 V4L2 是专门为linux 设备设计的一套视频框架&#xff0c;其主体框架在linux内核&#xff0c;可以理解为是整个linux系统上面的视频源捕获驱动框架。 相机驱动层位于HAL Moudle 与硬件层之间&#xff0c;借助linux 内核驱动框架&#xff0c;以文件节点的方式暴露接口给用…

vue2(2)

目录 天气案例 监视属性watch 深度监视 监视简写属性 watch对比computed 绑定class样式 条件渲染 列表渲染 天气案例 绑定事件的时候&#xff0c;xxx"yyy" yyy可以写一些简单的语句 <!DOCTYPE html> <html lang"en"> <head>…

积分代换和周期函数

昨晚上看书&#xff0c;有一个稳定随机过程的例题&#xff0c;涉及积分上下限代换、周期函数的微积分性质等知识点。这种题型以前肯定接触过&#xff0c;当下遇到了&#xff0c;思维仍然迷迷糊糊&#xff0c;像是一团乱麻&#xff0c;纠缠不清&#xff0c;照着答案思考了半天&a…

BOE(京东方)赋能荣耀Magic V2系列新品

7月12日&#xff0c;在荣耀举办的全场景新品发布会上&#xff0c;重磅推出了“革命性”折叠旗舰Magic V2系列以及首款MagicPad平板产品&#xff0c;荣耀Magic V2系列搭载BOE&#xff08;京东方&#xff09;全新一代柔性OLED折叠屏解决方案&#xff0c;以超强硬件护眼防护、超清…

开源数据库 就是免费 ,我白嫖我光荣 荣耀V2

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

荣耀Magic V2折叠旗舰发布,内外双屏均支持手写笔

7月12日&#xff0c;荣耀全新一代折叠旗舰荣耀Magic V2正式发布。通过深入洞察消费者需求&#xff0c;根植于强大的技术研发实力&#xff0c;荣耀以打破边界的思维创新重新定义折叠屏手机&#xff0c;荣耀MagicV2系列实现了9.9mm的闭合态厚度&#xff0c;引领折叠屏手机进入毫米…

sip语音对讲终端怎么样?

sip语音对讲终端怎么样&#xff1f; IP语音对讲终端是一种通过网络进行语音通信的设备&#xff0c;具有以下特点&#xff1a; 1. 便捷性&#xff1a;IP语音对讲终端可以通过互联网实现远程通信&#xff0c;用户可在任何地点与他人进行语音交流&#xff0c;无需受到距离的限制…

IDEA提示:StringBuffer xxx‘ may be declared as ‘StringBuilde

如图所示&#xff0c;编写代码时遇见了如下IDEA警告&#xff1a; 原因&#xff1a;StringBuilder是线程不安全的&#xff0c;但是其效率高&#xff0c;而StringBuffer则相反&#xff0c;虽然其线程安全&#xff0c;但是效率低下。 由于 StringBuilder 相较于 StringBuffer 有速…