自定义View在我心中一直属于比较难的范围,但是别人能写为什么我写不出来呢,所以静下心来,根据网上参考,自己写了一个比较普遍的圆环百分数的View,经分析(本Demo)主要核心就一个线程,定时刷新界面,达到动态显示的效果,精华都在注释中,先上图,在上源码,希望能够及时帮我指出错误,共同学习!

public class StartYuanView extends View {private Paint paint; //画笔private int max=100;//最大进度private int rundwidth=10;//圆弧宽度private int measuredWidth;//当前画布宽度private int bigNumber = 0; //最大进度private int nowNumber= 0; //当前进度public StartYuanView(Context context, AttributeSet attrs) {super(context, attrs);}/*** 在使用时进行调用* 设置最大数字,也就是最大百分数,同时开启线程,动态加载View* */public void startView(int startNumber){bigNumber = startNumber;thread.start();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//创建画笔paint = new Paint();//防止画笔画出的画出现锯齿状毛边,影响美观paint.setAntiAlias(true);//测量当前画板宽度measuredWidth = getMeasuredWidth();//设置为空心圆paint.setStyle(Paint.Style.STROKE);//设置画笔宽度paint.setStrokeWidth(rundwidth);//设置画笔颜色paint.setColor(Color.YELLOW);//宽度float x = measuredWidth / 2;//高度float y = measuredWidth / 2;//半径int rd = measuredWidth / 2 - rundwidth / 2;/***开始画画,画的是整个圆*第一个参数:圆心的x坐标*第二个参数:圆心的y坐标*第三个参数:圆的半径*第四个参数:绘制时所使用的画笔* */canvas.drawCircle(x, y, rd, paint);//画个圆弧模板RectF rectF = new RectF(rundwidth/2,rundwidth/2,measuredWidth-rundwidth/2,measuredWidth-rundwidth/2);//设置圆弧颜色,此时的画笔颜色就是该圆弧的颜色paint.setColor(Color.BLUE);/***第一个参数:为确定圆弧区域的矩形,圆弧的中心点为矩形的中心点*第二个参数:为圆弧的开始角度(时钟3点的方向为0度,顺时钟方向为正)*第三个参数:为圆弧的扫过角度(正数为顺时钟方向,负数为逆时钟方向)*第四个参数:表示绘制的圆弧是否与中心点连接成闭合区域*第五个参数:为绘制圆弧的画笔* */canvas.drawArc(rectF,-90,nowNumber*360/max,false,paint);//设置第一个文字String oneText="当前百分比";//设置个文字模板Rect oneRect = new Rect();//将文字模板转移到画笔上,此时画笔的属性代表了该文字的属性paint.getTextBounds(oneText,0,oneText.length(),oneRect);//该画笔的宽度也就是该文字的宽度,因为文字已经在画笔上了paint.setStrokeWidth(0);//该画笔的大小,因为文字已经在画笔上了,所以就是该文字的大小paint.setTextSize(20);//设置画笔颜色,因为文字已经在画笔上了,所以就是该文字的颜色paint.setColor(Color.RED);/*** 在画板上画出该文字* 第一个参数:相关文字* 第二个参数:该参数表示text被画的起始x坐标* 第三个参数:该参数表示text被画的起始y坐标* 第四个参数:画笔* 这里之所以用这个参数是因为我找了个固定的数据来设置相关参数,可根据情况自己设置* */canvas.drawText(oneText,measuredWidth/4-oneRect.width()/2,measuredWidth/2+oneRect.height()/2,paint);//设置第二个文字String twoText=nowNumber*100/max+"%";//设置文字模板Rect twoRect = new Rect();//将文字模板转移到画笔上,此时画笔的属性代表了该文字的属性paint.getTextBounds(twoText,0,twoText.length(),twoRect);//设置画笔宽度,也就是文字宽度paint.setStrokeWidth(0);//设置画笔字体大小,也就是该文字字体大小paint.setTextSize(40);//设置画笔颜色,也就是该文字的颜色paint.setColor(Color.GREEN);//把该文字画到画板上canvas.drawText(twoText,measuredWidth/2+twoRect.width()/4,measuredWidth/2+twoRect.height()/2,paint);}/*** 通过线程来动态设置View达到动画效果* */private Thread thread = new Thread(){@Overridepublic void run() {while(true){try {/**如果当前数字小于设置的最大数字就一直加*/if (nowNumber < bigNumber){nowNumber = nowNumber+1;}/**休息时间*/Thread.sleep(70);} catch (InterruptedException e) {e.printStackTrace();}/*** 刷新界面 - 无需在UI线程,在工作线程即可被调用,invalidate()必须在UI线程* */postInvalidate();}}};
}

调用时的 fb 查找到控件后 直接调用 startView(),添加百分数即可,一般用于View创建时,如需后期动态调整,灵活运行即可

Android圆形进度条,显示百分比相关推荐

  1. 完成度百分比用计算机怎么算,excel表格以进度条显示百分比的教程

    在Excel中经常需要统计数据,有些有百分比项目的,如果以进度条方式显示百分比,数值大概是多少也都一目了然了,如果学会了这一做法,相信你的工作效率会提升得很快.接下来是学习啦小编为大家带来的excel ...

  2. 超简单的Android圆形进度条

    效果图: 代码优化/简化.教科书级别注释.复制粘贴即可用 代码: package com.zistone.factorytest0718.view;import android.content.Con ...

  3. 异步下载圆形进度条显示进度

    圆形进度条参考链接即可:使用css3实现圆形进度条 需求点击下载后遮罩层显示下载进度: 1.圆形进度条参考以上链接,有点小瑕疵,可更改定位距离实现重合. 2.遮罩层: .lbOverlay{ disp ...

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

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

  5. android圆形进度条

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

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

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

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

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

  8. 【Matlab】for循环进度条显示百分比进程和剩余时间

    1.Introduction 又用回了Matlab,竟然发现之前写的进度条没有总结过,又去翻了遍代码,整理如下: 2.Materials and methods 百分比思路:目前迭代轮次 / 总轮次 ...

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

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

  10. Android圆形进度条动画

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

最新文章

  1. python 删除list 里面的一个空集合
  2. java 游戏视频_Java swing实现的小游戏24点游戏源码附带视频指导教程
  3. CentOS(5.8/6.4)linux生产环境若干优化实战------就爱运维
  4. You third iOS app,这个APP要放到手机上面运行,才会成功,才会新建记录。
  5. python文件读取写入实践_python文件写入实例分析
  6. jquer each 遍历的结果不显示 null_SpringBoot系列(三十一)- Thymeleaf如何用th:each 做条件遍历
  7. ThoughtWorks洞见领域驱动设计思维导图笔记
  8. matlab 分隔线,matlab字符分割方法
  9. layui添加复选框_对layui初始化列表的CheckBox属性详解,初始化属性
  10. Android 系统性能优化(51)---APK 安装时间长
  11. Spark算子--Scala版本 educoder
  12. html5在别的电脑上打不开,U盘在别台电脑上打不开的原因分析及解决
  13. Chrome 清除当前网站下的缓存
  14. 防火墙双机热备配置实例(二)
  15. 手机突然变卡,不得不重置
  16. Linux常用指令指南
  17. python参考手册小说_-精选版python 中文手册.pdf
  18. 马未都说收藏:陶瓷篇(3、4、5)宋瓷-官窑-汝官哥钧定
  19. Linux 应用程序安装卸载
  20. 播放器初始化配置重点

热门文章

  1. 安装intel PRO/wireless 2200BG Network connection 无线网卡驱动
  2. python做壁纸_用Python做地球壁纸
  3. 【环境搭建】linux上pip换源
  4. 数据结构与算法题目集(中文) - 7-32 哥尼斯堡的“七桥问题”(25 分)
  5. 使用ScrollView实现上下联动(标题栏与内容)
  6. 苹果确认了!iPhone将改用USB-C接口
  7. 完全背包变式 一本通 1293:买书
  8. matlab找异步电机,基于MATLAB的异步电机仿真研究
  9. 《人类简史》作者:AI 黑掉了人类文明的操作系统
  10. 如何让公安监控系统运维变简单?