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 与父控件的四个边缘对齐( ...
随机推荐
- 移动APP和传统软件测试的区别[转载]
目录 1. 移动App比PC 上的程序测试要复杂 2. 移动APP测试中如何设计Test Case 3. 让自己成为真实的用户 4. 关注用户体验测试 5. 少做UI自动化,多做后台接口的自动化 6. ...
- spring boot下WebSocket消息推送
WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范.WebSo ...
- C#WinForm 窗体回车替换Tab
/// <summary> /// 回车切换控件 /// </summary> /// <param name="sender"></pa ...
- dnslog小技巧
一.dnslog利用场景 主要针对无回显的情况. Sql-Blind RCE SSRF RFI(Remote File Inclusion) 二.原理 将dnslog平台中的特有字段payload带入 ...
- c++11 std::move()
简单点理解,c++11 中的std::move() 函数,实际上就是将一个左值强制转换成一个右值引用数据类型,从而可以调用相应的对右值引用重载的函数. 如果使用std::move() 的返回值做为参数 ...
- Effective C++之条款2:尽量以const enum inline替换 #define
本文的标题也可以改成“用编译器替换预处理器”: const double AspectRatio = 1.653; //最好使用上述代码替换下述代码: #define ASPECT_RATIO 1.6 ...
- 第一天:powershell外部命令
首先我们应该怎样打开powershell呢?win+R,之后是一个运行窗口,在里面输入“powerhsell".按回车键,就可以打开powershell命令窗口了.当然也有其他方法打开,比如 ...
- Hexo next主题添加站内搜索功能
根据关键字搜索博文,站内搜索的功能很实用.hexo开启站内搜索很方便,已经有现成的插件可以使用,也是为了方便自己 安装插件 npm install hexo-generator-search --sa ...
- Mybatis3中@SelectProvider传递参数
一.通常情况下我们使用实体类或者vo类来传递参数,这样可以在provider中直接使用#{param}来获取参数 二.在mybatis3.3以下版本只能传递一个参数,所以如果要传递多个参数必须封装成M ...
- 基于javaweb人脸识别注册登录系统
---恢复内容开始--- 现在是2019年,人脸识别技术已经相当成熟了,百度自2017年发布人脸识别技术,已经被广泛应用,不管从现在的iphoneX掀起的面部解锁到手机应用端的各种人脸认证,这一技术已 ...