新建RoundProgressBar

class RoundProgressBar : View {

    private val paint = Paint()

    var max = 100      //最大进度
var progress = 0 //当前进度 取值范围 0-max
set(value) {
field = value
invalidate()//调用该方法后 onDraw会执行
}
var roundColor = Color.GRAY //圆环颜色
var roundProgressColor = Color.YELLOW //圆环进度的颜色
var roundWidth:Float = 16f //圆环的宽度(粗细) constructor(context: Context) : super(context) {
init(null, 0)
} constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) {
init(attributeSet, 0)
} constructor(context: Context, attributeSet: AttributeSet, defStyle: Int) : super(context, attributeSet, defStyle) {
init(attributeSet, defStyle)
} private fun init(attributeSet: AttributeSet?, defStyle: Int) {
val typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.RoundProgressBar, defStyle, 0)
max = typedArray.getInt(R.styleable.RoundProgressBar_max, 100)
progress = typedArray.getInt(R.styleable.RoundProgressBar_progress, 30)
progress = max(0,min(progress,100))
roundColor = typedArray.getColor(R.styleable.RoundProgressBar_roundColor, Color.GRAY)
roundProgressColor = typedArray.getColor(R.styleable.RoundProgressBar_roundProgressColor,Color.YELLOW)
roundWidth = typedArray.getDimension(R.styleable.RoundProgressBar_roundWidth,16f)
typedArray.recycle()
} override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
// 获取圆心x坐标 (x=y)
val c = (width / 2).toFloat()
// 圆环的半径
val radius = c - roundWidth / 2 paint.color = roundColor //设置颜色
paint.style = Paint.Style.STROKE
paint.strokeWidth = roundWidth //设置宽度
paint.isAntiAlias = true //消除锯齿 canvas?.drawCircle(c,c,radius,paint) paint.color = roundProgressColor
paint.style = Paint.Style.STROKE
paint.strokeWidth = roundWidth
paint.isAntiAlias = true val rectF = RectF(c - radius,c - radius,c + radius,c + radius)
canvas?.drawArc(rectF,(-90).toFloat(),(progress * 360 / max).toFloat(),false,paint)
//invalidate()
} }
context.obtainStyledAttributes 用来获取布局文件的所有属性
canvas?.drawCircle(c,c,radius,paint) 根据画笔类型画圆环或者画圆
Paint.Style.STROKE 画圆环  Paint.Style.FILL 画圆  Paint.Style.FILL_AND_STROKE 画圆 直径包括strokeWidth宽度
canvas?.drawArc(矩形对象,起始角度,画的角度,是否包含圆心,paint) 想要包含圆心的 画笔样式不能是Paint.Style.STROKE 才有效果 

在res.values下创建attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources> <declare-styleable name="RoundProgressBar">
<attr name="max" format="integer" />
<attr name="progress" format="integer" />
<attr name="roundColor" format="color" />
<attr name="roundProgressColor" format="color" />
<attr name="roundWidth" format="dimension" />
</declare-styleable> </resources>

后面就可以使用了

<com.chao.myvideo.view.RoundProgressBar
android:layout_width="50dp"
android:layout_height="50dp"
app:progress="0"
app:max="100"
android:layout_gravity="center"/>

android 圆环进度view的更多相关文章

  1. Android 带进度的圆形进度条

    最近项目有个需求,做带进度从下到上的圆形进度条. 网上查了一下资料,发现这篇博客写得不错http://blog.csdn.net/xiaanming/article/details/10298163 ...

  2. Android多种进度条使用详解

    在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先 ...

  3. Android loading进度条使用简单总结

    在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先 ...

  4. android的进度条使用

    android的进度条 1.实现的效果 2.布局代码 先写一个my_browser.xml文件 存放WebView <?xml version="1.0" encoding= ...

  5. android多线程进度条

    多线程实现更新android进度条. 实例教程,详细信息我已经注释   android多线程进度条   01package com.shougao.hello; 02 03import android ...

  6. Android 自己定义View学习(2)

    上一篇学习了基本使用方法,今天学一下略微复杂一点的.先看一下效果图 为了完毕上面的效果还是要用到上一期开头的四步 1,属性应该要有颜色,要有速度 <?xml version="1.0& ...

  7. Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)

    Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect) [TOC] 这两个方法的区别 View.ge ...

  8. 1.Android 视图及View绘制分析笔记之setContentView

    自从1983年第一台图形用户界面的个人电脑问世以来,几乎所有的PC操作系统都支持可视化操作,Android也不例外.对于所有Android Developer来说,我们接触最多的控件就是View.通常 ...

  9. 两种CSS3圆环进度条详解

    晚上睡觉之前,我抽了1个多小时,研究了一下圆环进度条,结合从网上查阅的资料,我终于掌握了两种圆环的生成方法. 这次的效果就是单纯的CSS3效果,也没有写具体的JS,等以后有时间在好好整理一下吧~. 第 ...

随机推荐

  1. 新浪SAE云平台下使用codeigniter的数据库配置

    新浪SAE云平台下使用codeigniter的数据库配置 投稿:shichen2014 字体:[增加 减小] 类型:转载 这篇文章主要介绍了新浪SAE云平台下使用codeigniter的数据库配置,主 ...

  2. Maven相关:mvn的配置和简单命令

    1.配置mvn: 点击链接 http://maven.apache.org/download.cgi 下载 解压到文件夹: 配置系统环境变量: 测试:mvn -v 2.mvn命令: 1. 显示版本信息 ...

  3. 1. rabbitmq 安装

    1. ubuntu 16 18 安装 https://blog.csdn.net/haeasringnar/article/details/82715823 2. centos 7 https://w ...

  4. psmisc

    https://packages.ubuntu.com/xenial/psmisc Package: psmisc (22.21-2.1build1) Other Packages Related t ...

  5. linux 查看链接库的版本

    我们编译可执行文件的时候,会链接各种依赖库, 但是怎么知道依赖库的版本正确呢? 下面有几种办法: ldd 这是比较差的,因为打印结果更与位置相关 dpkg -l | grep libprotobuf ...

  6. keras字符编码

    https://www.jianshu.com/p/258a21ae0390https://blog.csdn.net/apengpengpeng/article/details/80866034#- ...

  7. java内部类(构造spring中的接收返回数据的实体类)

    说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟. 原文链 ...

  8. Codeforces Round #563 (Div. 2) 划水记

    网太卡只好做划水选手,只做EF. E 很容易发现第一个数是2k或者是3*2k-1,因为消去因子次数要尽可能多,然后可以直接dp一发转移还剩几个2/3即可,写起来有些麻烦 #include<bit ...

  9. PowerShell-Selenium技术实时调试和操作Chrome浏览器

    只需要4行代码: $AnyWindow=$Chrome.WindowHandles.Item() $Chrome=$Chrome.SwitchTo().Window($AnyWindow) Write ...

  10. hdu 1246

    很久没有写题解了~因为懒(年纪大了就是脸皮厚,还有脸说) 这道题今天花了很长时间去推,一开始以为是规律题,没推出来,直接模拟也TLE了,接着考虑实在是没思路,看了题解. 思路大概就是这样: 先上代码( ...