前言

  一个实现,空心圆环的自定义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的更多相关文章

  1. 【Android 应用开发】 自定义 圆形进度条 组件

    转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...

  2. 自定义环形进度条RoundProgressBar

    一.效果图: Canvas画圆环说明: 圆环宽度不必在意,只是画笔宽度设置后达到的效果. 二.实现步骤 1.自定义View-RoundProgressBar 2.设置属性resources(decle ...

  3. ProgressBar学习笔记,自定义横向进度条的样式(包含ActionBar上面的进度条)

     点显示进度条后→   android:max="100" 进度条的最大值 android:progress  进度条已经完成的进度值 android:progressDrawab ...

  4. Android笔记(二十三) Android中的ProgressBar(进度条)

    圆形进度条和水平进度条 进度条也是UI界面一种非常实用的组件,通常用于向用户显示某个耗时操作完成的百分比,进度条可以动态的显示进度,避免长时间的执行某个耗时操作时,让用户感觉程序失去了相应,从而更好的 ...

  5. android开发之自定义组件

    android开发之自定义组件 一:自定义组件: 我认为,自定义组件就是android给我们提供的的一个空白的可以编辑的图片,它帮助我们实现的我们想要的界面,也就是通过自定义组件我们可以把我们要登入的 ...

  6. canvas绘制百分比圆环进度条

    开发项目,PM会跟踪项目进度:完成某个事情,也可以设置一个完成的进度. 这里用canvas绘制一个简单百分比圆环进度条. 看下效果: 1. 动画方式   2. 静默方式   // 贴上代码,仅供参考 ...

  7. Vue/React圆环进度条

    数据展示,一直是各行各业乐此不疲的需求,具体到前端开发行业,则是各种各种图表数据展示,各种表格数据展示,烦不胜烦(繁不胜繁)! 前几天刚做了折线图.柱状图.饼状图之类的图表数据展示效果,今天又碰到了类 ...

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

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

  9. Android再学习-20141018-布局-进度条

    20141018-Android再学习 对齐至控件的基准线 为了保证印刷字母的整齐而划定的线(四线三格的第三条线). android:layout_alignBaseline 与父控件的四个边缘对齐( ...

随机推荐

  1. 如果在vue中实现一个输入框的抖动效果?

    1. 先来理下思路? 1)抖动就是摆动,现实中的钟摆可以很形象. 2)当摆动到临界点后,就会向相反的方向摆动. 3)在没有动力时,摆动会慢慢停止. 2.用法: :start.sync 里面是抖动器名字 ...

  2. add new color number to the color drop down in enovia PLM

    Ticket description:A55482L Ticket attachment: Open the attached page 2. Open the internationalizing ...

  3. Vue之获取用户当前所在省市

    今天小编给大家带来的是使用Vue获取用户所在城市,Vue是很强大的,给大家准备好现成的插件供大家调用,下面的Demo小编使用的是百度API. 首先我们从百度平台申请百度地图的秘钥,申请成功后我们将&l ...

  4. javascript基础入门之js中的结构分支与循环语句

    javascript基础入门之js中的结构分支与循环语句 程序的结构①顺序结构:自上而下:②选择(分支)结构:多条路径,根据不同的条件,只执行其中一个:③循环结构:重复某些代码④配合特定的语句实现选择 ...

  5. leetcode -有效的字母异位词 python&C++

    C++解题代码: class Solutiion { public: bool isAnagram(string s, string t) { ](); int n = s.length(); int ...

  6. @ControllerAdvice + @ExceptionHandler全局处理Controller层异常

    import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind ...

  7. 46 python学习笔记

    0 引言 之前用python跑过深度学习的代码,用过一段时间的jupiter和tensorflow:最近在Ubuntu下搭建起了VSCode + Anaconda的python开发环境,感觉很好用,尤 ...

  8. cnn知识点汇总

    关于卷积神经网络的入门基础知识: https://blog.csdn.net/weixin_42451919/article/details/81381294   卷积神经网络的相关公式推导: htt ...

  9. NX二次开发-UFUN点收集器UF_UI_select_point_collection

    #include <uf.h> #include <uf_ui.h> UF_initialize(); //点收集器 char sMessage[] = "点收集器& ...

  10. win7+vs2010配置驱动开发环境(问题种种版...)

     本来按照这个来做,能跑通helloworld,可是复杂的驱动就会出错....不知道什么原因,后来就直接用命令行来编译的. -------------------------------------- ...