效果图:

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

代码:

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();}}

超简单的Android圆形进度条相关推荐

  1. android椭圆进度,Android 圆形进度条

    可设置 线性渐变-背景色-进度条颜色-圆弧宽度 效果图 普通效果.png 渐变效果 改变弧度效果 步骤一:新建自定义控件CirclePercentView继承View(代码可直接复制使用) impor ...

  2. android圆形进度条

    一.简介 1.本篇博文给大家介绍一个圆形进度条控件的绘制,首先看一下效果,如下:当点击圆形按钮时,开始加载条,当松开时,进度条回归其实位置: 二.结构分析 为了达到以上效果,我们首先要清楚改控件的结构 ...

  3. android 圆形拖动条,Android圆形进度条自定义

    自定义圆形进度条 示例.png 示例 (2).png 示例 (3).png 示例 (4).png 实现 override fun onSizeChanged(w: Int, h: Int, oldw: ...

  4. android圆形进度条ProgressBar颜色设置

    原帖地址:http://www.apkbus.com/android-19012-1-1.html xml布局文件需加入如下的进度条构件: Java代码 <ProgressBar android ...

  5. android圆环进度条动画,Android 圆形进度条,类似一些计步软件的进度显示!

    Android 圆形的进度条,类似于一些计步的进度显示.其实也是我们项目中的效果,只不过后来迭代中改进了,所以现在才拿出来.浏览更多安卓源码 usage android:id="@+id/a ...

  6. Android圆形进度条动画

    说明: 分析了一个git项目:https://github.com/youmu178/ArcProgressBar 效果图: 关键代码: 调用MainActivity.java mArcProgres ...

  7. Android圆形进度条,显示百分比

    自定义View在我心中一直属于比较难的范围,但是别人能写为什么我写不出来呢,所以静下心来,根据网上参考,自己写了一个比较普遍的圆环百分数的View,经分析(本Demo)主要核心就一个线程,定时刷新界面 ...

  8. 自定义绘制圆形进度条

    自定义圆形进度条 Android 圆形进度条控件 demo示例 1.定义 attrs.xml <?xml version="1.0" encoding="utf-8 ...

  9. unity 超简单的圆形进度条

    1.首先在Canves下创建一个Image组件,将进度条的图片赋值 2.修改image组件,将Image Type修改为Filled,Fill Method 修改为Radial 360,Fill Or ...

最新文章

  1. python导入excel数据-Python数据处理之导入导出excel数据
  2. 关“视觉神经系统是怎么形成的?”的思考
  3. php页面转发,php如何实现页面路由转发
  4. span的取值与赋值(原生js与jquery) - 对比篇
  5. 07.移动先行之谁主沉浮----控件之轮流轰炸——布局类控件
  6. android 短信位置,浅析Android手机卫士之手机实现短信指令获取位置
  7. 用elastic stack来分析下你的redis slowlog
  8. 如果外卖APP想窃听我,有几个骚操作?
  9. 微信小程序报Cannot read property ‘setData‘ of undefined的错误
  10. Python学习Day14
  11. python lcut精确分词_python 分词
  12. Python基础之模块管理
  13. 实例讲解EasyLanguage入门
  14. 员工身高体重决定能否晋升?自如回应
  15. python 爬取财经新闻_如何用 100 行 Python 代码实现新闻爬虫?
  16. Visual Basic 6.0编写简单网页浏览器
  17. 北京车牌那么难摇为什么还能那么受欢迎?
  18. SSL连接dh key too small
  19. 第七十篇 数据处理与分析 Numpy
  20. t.cn短链接生成 - 新浪短网址生成器压缩网址详细教程

热门文章

  1. Java 脚本引擎 Rhino的学习
  2. 松下PLC FP-XH C30T 和昆仑通态触摸屏 TPC7022Ex 程序下载步骤
  3. android壁纸软件推荐,推荐四款主流安卓手机桌面美化软件评测
  4. hibernate的官方网站
  5. 安装vfp9遇到的问题
  6. openharmony移植之编写电阻触摸屏驱动
  7. 【NATAPP】natapp内网穿透_麻瓜教程~~~下载——使用——快捷方式
  8. traffic-filter
  9. Python年利率计算器【N日年化收益率】
  10. 性能监控命令vmstat详解【杭州多测师】【杭州多测师_王sir】