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 与父控件的四个边缘对齐( ...
随机推荐
- 第一章 Linux是什么
Linux是核心与系统调用接口两层中间的操作系统 不同硬件的功能函数并不相同,IBM的Power CPU与Inter的x86架构不同,所以同一套操作系统是不能在不同的硬件平台上面运行的.也就是说,每种 ...
- add a characteristic in enovia PLM
Problem: add a new Char. name D_COI6 that the description is Injected coloration #7 (COI6) in the D_ ...
- line-height 行高的使用
line-height:normal; 默认 字体 line-height:1.5; line-height:200%; line-height:50px; ps : 固定的值 line-heig ...
- 常用的Docker镜像及处理命令
常用的镜像命令 docker run -d --name dockerui -p : -v /var/run/docker.sock:/var/run/docker.sock abh1nav/dock ...
- laydate日期插件弹出闪退和多次闪退问题解决
情况:点击第一个input 日期,可以正常选择日期,之后点击任何一个,都会闪一下然后消失,无法正常选择: 原因:lay-key的值的问题,需要循环重新为lay-key赋值 解决: <input ...
- Python 刷题知识点
if : elif : else : print('{0} \n{1} \n{2}' .format((a + b), (a - b), (a * b))) print(*[num**2 for nu ...
- Perl 条件语句
Perl 条件语句 Perl 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: 注意,数字 0, 字符串 '0' . & ...
- java 直接调用micorosoft office (2003-2007和2010版本)中excel中计算函数
主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx 读取excel和MySQL相关: java的poi技 ...
- [JZOJ 5817] 抄代码
题意: 给定2T个串,带修的判断两个串是否按规则一样?? 思路: 两个串是"抄袭的"肯定就是: 1.长度一样. 2.特殊字符位置一样 3.对于每个\(x\)在两个串中出现位置一样, ...
- Photon Server的服务器端配置
Photon Server与Unity3D的交互分为3篇博文实现 (1)Photon Server的服务器端配置 (2)Photon Server的Unity3D客户端配置 (3)Photon Ser ...