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,等以后有时间在好好整理一下吧~. 第 ...
随机推荐
- go语言小练习——给定英语文章统计单词数量
给定一篇英语文章,要求统计出所有单词的个数,并按一定次序输出.思路是利用go语言的map类型,以每个单词作为关键字存储数量信息,代码实现如下: package main import ( " ...
- ZOJ 2301/HDU 1199 线段树+离散化
给这个题目跪了两天了,想吐简直 发现自己离散化没学好 包括前一个离散化的题目,实际上是错了,我看了sha崽的博客后才知道,POJ那题简直数据弱爆了,本来随便一组就能让我WA掉的,原因在于离散化的时候, ...
- requests.get()///post函数///base64函数
1.requests.get() 一般的用法:r=requests.get(url) 或者是用上session: r=requests.session() r=r.get(url) get()收集的是 ...
- rocketmq 使用
rocketmq 基本使用可以看官网和官网给的demo. https://github.com/apache/rocketmq/tree/master/example 这里主要说明几个点:rocke ...
- Linux--Centos7开机启动 mysql5.7.19
参考:http://www.cnblogs.com/Anker/p/3551508.html
- 洛谷 P1032 字串变换(map)
题目传送门 解题思路: 搜索题,因为要求最少次数,用bfs. AC代码: #include<cstdio> #include<iostream> #include<cst ...
- CMake常用变量
CMake变量 CMake共用七种变量,如下所示: 目录: ()提供信息的变量. ()控制变量. ()描述系统的变量. ()控制构建过程的变量. ()语言变量. ()CTest变量. (7)CPack ...
- 87.QuerySet API使用详解:create方法
create:创建一条数据,并且保存到数据库中,这个方法相当于先用指定的模型创建一个一个对象,然后再调用这个对象的save方法,示例代码如下: from django.db import connec ...
- Aras Innovator时间验证
//方法名:bcs_Nexteer_CheckTime //功能描述:开始和结束日期对比 //原作者:joe //创建时间:20141226 //版权所有(C)JOE.FAN //debugger; ...
- php IP地址转换
<?php $enip = ip2long('210.110.11.49); echo $enip."<br />";//-764540111 echo long ...