新建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. oracle (6)---SQL 数据关联查询

    SQL 数据关联查询 Structure Query Language 从多(n)张表查询对应记录信息,必须有至少n-1个关联条件,否则会出现笛卡尔积的情况.1. 等值连接:没有连接关系的数据不会被查 ...

  2. 11. react 基础 使用charles 模拟接口数据

    charles参考文档 charles官网 模拟数据 模拟 axios 请求的数据 eg: 1. 编写 axios 请求 axios.get('/api/xxx') .then(()=>{ale ...

  3. BIOS与UEFI

    BIOS BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统".在IBM PC兼容系统上,是 ...

  4. contos7 共享文件夹开机自动挂载

    网上很多文章都说改文件/etc/fstab 我试了很多次都不行 然后看到另一个方法 在/etc/rc.d/rc.local 增加挂在脚本这个时候要注意执行权限问题 我是这样做的 sudo mount ...

  5. 吴裕雄--天生自然 JAVASCRIPT开发学习:弹窗

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script> ...

  6. android 根据距离区分 点击跟滑动事件

    public void onClick(View v) { if (isclick) Log.i(TAG, "onclick"); } }); } float distance = ...

  7. keras_yolo3阅读

    源码地址 https://github.com/qqwweee/keras-yolo3 春节期间仔细看了看yolov3的kears源码,这个源码毕竟不是作者写的,有点寒酸,可能大道至简也是这么个理.我 ...

  8. MySQL--主备相关命令

    创建用户账号 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'10.70.8.%' IDENTIFIED BY 'mysql'; ...

  9. Maven--配置 Maven 从 Nexus 下载构件

    在 POM 中配置: <project> ... <repositories> <repository> <id>nexus</id> &l ...

  10. [转载]matlab视频读取函数VideoReader

    看到以前matlab中读取视频多 使用mmreader等(参考<matlab读取/播放视频的函数>),而现在matlab有一个专门的视频读取类VideoReader完成视频读取的功能. 相 ...