1 绘图基础简析

1 精通Android自定义View(一)View的绘制流程简述
2 精通Android自定义View(二)View绘制三部曲
3 精通Android自定义View(三)View绘制三部曲综合简述
4 精通Android自定义View(四)自定义属性使用详解
5 精通Android自定义View(五)自定义属性值使用详情


6 精通Android自定义View(六)绘制篇Paint分析
7 精通Android自定义View(七)绘制篇Canvas分析
8 精通Android自定义View(八)绘制篇Canvas分析绘制文字
9 精通Android自定义View(九)绘制篇Canvas分析绘制图片
10 精通Android自定义View(十)绘制篇Canvas分析之绘制Path
11 精通Android自定义View(十一)绘制篇Canvas分析之裁剪


12 精通Android自定义View(十二)绘制圆形进度条

2 效果图

3 源码


public class CustomLineProgressView extends View {//设置默认最大进度public int max =100;//设置默认初始化进度public int progress=0;//设置View默认的大小private int mDefaultWidth = dp2px(60);private int mDefaultPadding = dp2px(10);// 定义设置进度圆的默认半径private int mRadius = mDefaultWidth/2;//圆环的默认宽度private  int mProgressBarHeight = dp2px(5);//声明初始化一个画笔private Paint mPaint = new Paint();//设置未加载进度的默认颜色private int mUnReachedBarColor = 0xffe6e6e6;//设置已加载进度的默认颜色private int mReachedBarColor = 0xff89cc99;//测量后的实际view的大小private int mMeasureWidth;private int mMeasureHeight;private RectF mRectF;public CustomLineProgressView(Context context) {super(context);//初始化画笔风格,图形参数,如圆圈的颜色,绘制的文字等initView();}public CustomLineProgressView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);setWillNotDraw(false);// 防止onDraw方法不执行//初始化画笔风格,图形参数,如圆圈的颜色,绘制的文字等initView();//获取自定义View中自定义属性的值TypedArray lTypedArray = context.obtainStyledAttributes(attrs, R.styleable.circularProgress);//获取定义圆弧进度的颜色mReachedBarColor=lTypedArray.getColor(R.styleable.circularProgress_progressColor,mReachedBarColor);mUnReachedBarColor=lTypedArray.getColor(R.styleable.circularProgress_progressBackgroundColor,mUnReachedBarColor);}private void initView() {mPaint.setStyle(Paint.Style.STROKE);mPaint.setAntiAlias(true);mPaint.setDither(true);mPaint.setStrokeCap(Paint.Cap.ROUND);mPaint.setTextSize(dp2px(10));}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);Log.e("progress",w + " h " +h+" oldw "+oldw+" oldh "+ oldh);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);//测量计算mMeasureWidth = measureSize(widthMeasureSpec);mMeasureHeight = measureSize(heightMeasureSpec);//重新测量setMeasuredDimension(mMeasureWidth, mMeasureHeight);//绘制圆环的半径mRadius=(mMeasureWidth -mDefaultPadding*2-mProgressBarHeight-getPaddingLeft()-getPaddingRight())/2;//绘制进度圆弧的外切矩形定义mRectF = new RectF(-mRadius, -mRadius, mRadius, mRadius);//动态设置绘制文本的大小mPaint.setTextSize(dp2px(mRadius/4));}private int measureSize(int measureSpec) {int result = 0;int specMode = MeasureSpec.getMode(measureSpec);int specSize = MeasureSpec.getSize(measureSpec);if (specMode == MeasureSpec.EXACTLY){//当specMode = EXACTLY时,精确值模式,即当我们在布局文件中为View指定了具体的大小result = specSize;}else {result = mDefaultWidth;   //指定默认大小if (specMode == MeasureSpec.AT_MOST){result = Math.min(result,specSize);}}return result;}@Overrideprotected synchronized void onDraw(Canvas canvas) {//获取显示进度的文字指示String text = progress + "%";//获取显示进度的文字的宽与高float textWidth = mPaint.measureText(text);float textHeight = (mPaint.descent() + mPaint.ascent()) / 2;canvas.save();//将画布移动到中心 view中心为原点(0,0)canvas.translate(mMeasureWidth/2,mMeasureHeight/2);mPaint.setStyle(Paint.Style.STROKE);//绘制未加载的进度,也就是绘制环背景mPaint.setColor(mUnReachedBarColor);mPaint.setStrokeWidth(mProgressBarHeight);//点(0,0)为原心canvas.drawCircle(0, 0, mRadius, mPaint);//绘制已加载的圆环进度mPaint.setColor(mReachedBarColor);mPaint.setStrokeWidth(mProgressBarHeight);//计算进度圆弧角度float sweepAngle = progress * 1.0f / max * 360;//绘制圆弧进度canvas.drawArc(mRectF, 0,sweepAngle, false, mPaint);//绘制显示进行的颜色mPaint.setStyle(Paint.Style.FILL);//绘制显示文本canvas.drawText(text, - textWidth / 2, - textHeight,mPaint);canvas.restore();}//将设置的db转为屏幕像素protected int dp2px(int dpVal) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dpVal, getResources().getDisplayMetrics());}//设置最大进度public void setMax(int i) {if (i<0||i>100){i=100;}max=i;}//更新进度public void setProgress(int number) {if (number>100){number=100;}if (number<0){number=0;}progress=number;invalidate();}/*** 设置进度已加载进度条的颜色* 这里只写了这个设置颜色* 当然也可以写出代码动态设置改变 未加载进度条的颜色* 还有显示文字的颜色* 还有进度条的宽度等等* @param color*/public void setReachedBarColor(int color){this.mReachedBarColor = color;}

精通Android自定义View(十二)绘制圆形进度条相关推荐

  1. 精通Android自定义View(十四)绘制水平向右加载的进度条

    1引言 1 精通Android自定义View(一)View的绘制流程简述 2 精通Android自定义View(二)View绘制三部曲 3 精通Android自定义View(三)View绘制三部曲综合 ...

  2. android 自定义音乐圆形进度条,Android自定义View实现音频播放圆形进度条

    本篇文章介绍自定义View配合属性动画来实现如下的效果 实现思路如下: 根据播放按钮的图片大小计算出圆形进度条的大小 根据音频的时间长度计算出圆形进度条绘制的弧度 通过Handler刷新界面来更新圆形 ...

  3. 精通Android自定义View(十六)invalidate方法和requestLayout方法

    1 简述 requestLayout方法会导致View的onMeasure.onLayout.onDraw方法被调用:invalidate方法则只会导致View的onDraw方法被调用 2 reque ...

  4. 精通Android自定义View(十九)自定义圆形炫彩加载转圈效果

    1 效果 2 源码 public class JiondongView extends View {private Paint mBackgroundPaint;private float mScal ...

  5. Android 自定义View实现环形带刻度的进度条

    本篇文章讲的是自定义View实现环形带刻度的进度条.和往常一样,主要还是想总结一下自定义View实现环形带刻度的进度条的开发过程以及一些需要注意的地方. 按照惯例,我们先来看看效果图 一.我们如何来实 ...

  6. 精通Android自定义View(十)绘制篇Canvas分析之绘制Path

    1 Path常用方法简析 Path在2D绘图中是一个很重要的类. Path在这里可以绘制基本的图形,也可以绘制其他复杂的图形. 2 常用API解析与示例 2.1 xxxTo方法 Path类中提供了一套 ...

  7. 精通Android自定义View(十八)自定义圆形菊花加载转圈效果

    1 效果: 2 源码: public class LoadingView extends View {public LoadingView(Context context) {this(context ...

  8. Android自定义没有资源文件的圆形进度条ProgressBar

    最近公司开发的SDK中需要使用圆形加载进度条,而且说要那种动态的转圈圈的那种进度条.当然这种进度条想实现很简单,用几个资源图片,以动画循环播放就行.但考虑到是SDK,有资源文件不好打包,想打包就要用到 ...

  9. android+属性动画+高度,android 自定义view+属性动画实现充电进度条

    近期项目中需要使用到一种类似手机电池充电进度的动画效果,以前没学属性动画的时候,是用图片+定时器的方式来完成的,最近一直在学习动画这一块,再加上复习一下自定义view的相关知识点,所以打算用属性动画和 ...

最新文章

  1. shell中引号的使用方法
  2. 对网络中安全审计产品的理解
  3. 获取js里添加的css文件,用JS添加一个css文件
  4. SHELL test [ 命令用法
  5. 上线到凌晨4点半 pagehelper的bug?
  6. C语言基础专题 - 存储类(编辑中)
  7. java基础-- 集合框架入门 及 List集合
  8. 数值计算之 共轭梯度法(2)非线性共轭梯度法
  9. dw 用html修改文字样式,Dreamweaver中插入文本以及文本格式设置方法?
  10. python中除法带小数点_python 除法保留两位小数点的方法
  11. linux ftp pure,linux下安装FTP(pure-ftpd)
  12. 家用游戏机主机的发展历史
  13. 好用的录音软件排行 有哪些电脑录音工具
  14. [blender]常用按键操作以及新手失误教程
  15. CPU频率与内存频率的关系
  16. 21级蓝桥选拔赛(1)
  17. MySQL索引下推需要了解下
  18. 史上最简单的原生JS实现轮播图效果
  19. jquery缩放手势插件_ZooMove:jQuery插件可在悬停时缩放图像
  20. 网站的配色应该如何做

热门文章

  1. 百度大脑公开课:快速定制、部署高精度深度学习模型!
  2. ICCV 2019 | 基于轻量级新架构OSNet的域适应改进ReID
  3. spring boot入门(九) springboot的过滤器filter。最完整、简单易懂、详细的spring boot教程。
  4. 一篇文章教会你使用Python中三种简单的函数
  5. 次时代模型的制作 这几个点你真的知道了吗?|附加50g学习资料
  6. Numpy | Python列表与Numpy数组对比
  7. 收藏 | 从SGD到NadaMax,深度学习十种优化算法原理及实现
  8. 机械指挥官——全国领先的工程机械管理平台
  9. 前馈神经网络——深度学习之神经网络核心原理与算法
  10. 有趣的应用 | 使用RNN预测股票价格系列一