android 圆环进度view
新建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的更多相关文章
- Android 带进度的圆形进度条
最近项目有个需求,做带进度从下到上的圆形进度条. 网上查了一下资料,发现这篇博客写得不错http://blog.csdn.net/xiaanming/article/details/10298163 ...
- Android多种进度条使用详解
在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先 ...
- Android loading进度条使用简单总结
在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先 ...
- android的进度条使用
android的进度条 1.实现的效果 2.布局代码 先写一个my_browser.xml文件 存放WebView <?xml version="1.0" encoding= ...
- android多线程进度条
多线程实现更新android进度条. 实例教程,详细信息我已经注释 android多线程进度条 01package com.shougao.hello; 02 03import android ...
- Android 自己定义View学习(2)
上一篇学习了基本使用方法,今天学一下略微复杂一点的.先看一下效果图 为了完毕上面的效果还是要用到上一期开头的四步 1,属性应该要有颜色,要有速度 <?xml version="1.0& ...
- Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)
Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect) [TOC] 这两个方法的区别 View.ge ...
- 1.Android 视图及View绘制分析笔记之setContentView
自从1983年第一台图形用户界面的个人电脑问世以来,几乎所有的PC操作系统都支持可视化操作,Android也不例外.对于所有Android Developer来说,我们接触最多的控件就是View.通常 ...
- 两种CSS3圆环进度条详解
晚上睡觉之前,我抽了1个多小时,研究了一下圆环进度条,结合从网上查阅的资料,我终于掌握了两种圆环的生成方法. 这次的效果就是单纯的CSS3效果,也没有写具体的JS,等以后有时间在好好整理一下吧~. 第 ...
随机推荐
- 18 12 29 css background
background属性 属性解释 background属性是css中应用比较多,且比较重要的一个属性,它是负责给盒子设置背景图片和背景颜色的,background是一个复合属性,它可以分解成如下几个 ...
- ping内网服务器
cat ping.sh#!/bin/baship="192.168.1."lastip=(200201202210211212220221222) #ip列表 可以继续添加 ps ...
- JS高级学习笔记(2)之js多线程
参考大神:Javascript多线程 web worker ---- 6.Web Worker 概述 截图过来: 线程之间的通信 let worker = new Worker(‘js文件路径’) 主 ...
- 算概率(dp,数论)
链接:https://ac.nowcoder.com/acm/contest/3003/C来源:牛客网 题目描述 牛牛刚刚考完了期末,尽管牛牛做答了所有 n 道题目,但他不知道有多少题是正确的. 不过 ...
- Bugku 加密(持续更新)
1.滴答~滴 不多说,摩斯密码解密. 2.聪明的小羊 栅栏密码解密. 3.ok Ook解密 4.这不是摩斯密码 brainfuck解码 5.简单加密 凯撒有两种编码脚本,一种是字母26内循环移位,一种 ...
- 201703-1 分蛋糕 Java
思路: 注意最后如果剩余蛋糕的重量小于k,也算一个人分到 import java.util.Scanner; public class Main { public static void main(S ...
- STM32F407的Modbus做为主站与从站通讯
在调试STM32F407的串口Modbus通讯之前,也使用过Modbus通讯,只不过都是在PLC或则昆仑通态的触摸屏上使用直接调用现成的库里面的模块,驱动就可以,相对于STM32来,使用PLC库里面的 ...
- 关于linux下安装mysqlclient报 Failed building wheel for mysqlclient问题
导入下列依赖包,搞定 sudo apt-get install python3 python-dev python3-dev build-essential libssl-dev libffi-dev ...
- mysql not in 或 in 优化
在MySQL 中,not in 或in 优化思路, 利用left join 来优化,类似如下的查询方式: select id from a where id in (select id from b ...
- Vue2.0权限树组件
项目使用的饿了么的Element-Ui,权限树使用其树形控件: <el-tree :data="data" ></el-tree> 刚开始没有特殊需求,三级 ...