Android开发 View_自定义圆环进度条View
前言
一个实现,空心圆环的自定义View,已经封装完好,可以直接使用。
效果图

代码
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View; import androidx.annotation.ColorInt;
import androidx.annotation.Nullable; public class RingProgressBar extends View {
private Paint mPaint;
private int mBgRingColor = Color.BLACK;
private int mProgressRingColor = Color.RED;
private int mBgRingWidth = 20;
private int mProgressRingWidth = 20;
private int mMax = 100;
private int mCurrentProgress = 0;
private int width = 0;
private int height = 0; public RingProgressBar(Context context) {
super(context);
} public RingProgressBar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
} public RingProgressBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mPaint = new Paint();
} public RingProgressBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mPaint = new Paint();
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
drawBgRing(canvas);
drawProgressRing(canvas);
} /**
* 测量尺寸
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = MeasureSpec.getSize(widthMeasureSpec);
height = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(width, height);
} public void setBgRing(@ColorInt int bgRingColor, int ringWidth) {
mBgRingColor = bgRingColor;
mBgRingWidth = dip2px(ringWidth);
postInvalidate();
} public void setProgressRing(@ColorInt int progressRingColor, int ringWidth) {
mProgressRingColor = progressRingColor;
mProgressRingWidth = dip2px(ringWidth);
postInvalidate(); } /**
* 设置最大值
*
* @param max
*/
public void setMax(int max) {
mMax = max;
postInvalidate(); } /**
* 设置进度
*
* @param progress
*/
public void setProgress(int progress) {
mCurrentProgress = progress;
postInvalidate(); //请求失效,重新绘制 } /**
* 绘制背景环
* @param canvas
*/
private void drawBgRing(Canvas canvas) {
mPaint.setColor(mBgRingColor); //设置画笔颜色
mPaint.setStyle(Paint.Style.STROKE);//设置画笔为描边
mPaint.setStrokeWidth(mBgRingWidth);//设置描边宽度
mPaint.setStrokeCap(Paint.Cap.BUTT);//设置画笔收笔类型
mPaint.setAntiAlias(true); //抗锯齿
canvas.drawCircle(width / 2, height / 2, (width - mBgRingWidth) / 2, mPaint); //画圆形
mPaint.reset();
} /**
* 绘制进度环
* @param canvas
*/
private void drawProgressRing(Canvas canvas) {
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeCap(Paint.Cap.BUTT);
mPaint.setColor(mProgressRingColor);
mPaint.setStrokeWidth(mProgressRingWidth);
mPaint.setAntiAlias(true);
RectF rectF = new RectF();
rectF.left = 0 + mProgressRingWidth / 2;
rectF.right = width - mProgressRingWidth / 2;
rectF.top = 0 + mProgressRingWidth / 2;
rectF.bottom = height - mProgressRingWidth / 2;
float progress = 0;
if (mCurrentProgress < mMax) {
float proportion = (float) 360 / (float) mMax;
progress = mCurrentProgress * proportion;
} else {
progress = 360;
}
canvas.drawArc(rectF, 270, progress, false, mPaint); //画圆弧
mPaint.reset();
} /**
* 根据手机分辨率从DP转成PX
* @param dpValue
* @return
*/
public int dip2px(float dpValue) {
float scale = getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}
Android开发 View_自定义圆环进度条View的更多相关文章
- 【Android 应用开发】 自定义 圆形进度条 组件
转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...
- 自定义环形进度条RoundProgressBar
一.效果图: Canvas画圆环说明: 圆环宽度不必在意,只是画笔宽度设置后达到的效果. 二.实现步骤 1.自定义View-RoundProgressBar 2.设置属性resources(decle ...
- ProgressBar学习笔记,自定义横向进度条的样式(包含ActionBar上面的进度条)
点显示进度条后→ android:max="100" 进度条的最大值 android:progress 进度条已经完成的进度值 android:progressDrawab ...
- Android笔记(二十三) Android中的ProgressBar(进度条)
圆形进度条和水平进度条 进度条也是UI界面一种非常实用的组件,通常用于向用户显示某个耗时操作完成的百分比,进度条可以动态的显示进度,避免长时间的执行某个耗时操作时,让用户感觉程序失去了相应,从而更好的 ...
- android开发之自定义组件
android开发之自定义组件 一:自定义组件: 我认为,自定义组件就是android给我们提供的的一个空白的可以编辑的图片,它帮助我们实现的我们想要的界面,也就是通过自定义组件我们可以把我们要登入的 ...
- canvas绘制百分比圆环进度条
开发项目,PM会跟踪项目进度:完成某个事情,也可以设置一个完成的进度. 这里用canvas绘制一个简单百分比圆环进度条. 看下效果: 1. 动画方式 2. 静默方式 // 贴上代码,仅供参考 ...
- Vue/React圆环进度条
数据展示,一直是各行各业乐此不疲的需求,具体到前端开发行业,则是各种各种图表数据展示,各种表格数据展示,烦不胜烦(繁不胜繁)! 前几天刚做了折线图.柱状图.饼状图之类的图表数据展示效果,今天又碰到了类 ...
- 两种CSS3圆环进度条详解
晚上睡觉之前,我抽了1个多小时,研究了一下圆环进度条,结合从网上查阅的资料,我终于掌握了两种圆环的生成方法. 这次的效果就是单纯的CSS3效果,也没有写具体的JS,等以后有时间在好好整理一下吧~. 第 ...
- Android再学习-20141018-布局-进度条
20141018-Android再学习 对齐至控件的基准线 为了保证印刷字母的整齐而划定的线(四线三格的第三条线). android:layout_alignBaseline 与父控件的四个边缘对齐( ...
随机推荐
- C# WinfForm 控件之dev报表 XtraReport (五) 并排报表
有了前边的基础这个就很简单了,建一个容器报表 在detail,上放两个xrsubReport.再做两个明细报表,分别指定到xrsubreport就可以了
- USACO Running Away From the Barn /// 可并堆 左偏树维护大顶堆
题目大意: 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于m的点有多少个 左偏树 https://blog.csdn.net/pengwill97/article/details/82 ...
- Java oop 第13章_多线程
第13章_多线程 一. 多线程相关的概念: 程序:由某种编程语言开发可执行某些功能的代码组合,它是静态的概念. 进程:当程序被执行时的过程可以理解为讲程序从外存调入内存的过程,会为每一个程序 ...
- VS2013 蛋疼的“AJAX Control Toolkit”安装过程
1.AJAX Control Toolkit 下载问题 方法一. 在vs2013中 工具->NuGet程序包管理器->管理解决方案的NuGet程序包 搜索 ajax z找到 AjaxCon ...
- PHP算法之有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认为是 ...
- shell 例子
shell编程入门 http://www.runoob.com/linux/linux-shell-variable.html http://c.biancheng.net/cpp/shell/ .查 ...
- IDEA使用maven插件打jar包流程
idea使用maven插件打jar包步骤以及遇到的问题 idea自带了maven工具,idea右边点击maven选项: 一.在pom中添加插件,直接复制就好,如下选项 <plugin> & ...
- 使用vue-cli 脚手架快速搭建单页面组件 -------webpack工具的介绍
在使用vue-cli时我们先了解一下什么是webpack. Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按 ...
- Nginx被动健康检查和主动健康检查
1.被动健康检查 Nginx自带有健康检查模块:ngx_http_upstream_module,可以做到基本的健康检查,配置如下: upstream cluster{ server max_fail ...
- DELPHI 数据库操作
DELPHI 把数据库中的数据转换成XML格式 function ReplaceString(AString: string): string; begin Result := StringRepla ...