一、概述

今天接着研究paint画笔,实现圆环百分比进度变化效果,效果图如下:

进度条.gif

二、思路分析

这个效果其实和前面的qq计步器实现思路差不多,那个是两个圆弧,这个里面是不动的圆形,外面是圆弧。

2.1自定义属性

自定义属性包含内圆画笔的颜色,画笔描边的粗细,外面圆弧的画笔颜色,里面中间百分比文字的大小和颜色。

attrs文件

自定义类构造函数

//获取属性

public CircleProgressView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.CircleProgressView);

mInnerColor = a.getColor(R.styleable.CircleProgressView_innerCicleColor,mInnerColor);

mOutColor = a.getColor(R.styleable.CircleProgressView_outCicleColor,mOutColor);

mRoundWidth = (int)a.getDimension(R.styleable.CircleProgressView_roundWidth,dp2px(mRoundWidth));

mTextSize = a.getDimensionPixelSize(R.styleable.CircleProgressView_progressTextSize,sp2px(mTextSize));

a.recycle();

mInnerPaint = new Paint();

mInnerPaint.setColor(mInnerColor);

mInnerPaint.setAntiAlias(true); //抗锯齿

mInnerPaint.setStrokeWidth(mRoundWidth);

mInnerPaint.setStyle(Paint.Style.STROKE); //空心圆

mOutPaint = new Paint();

mOutPaint.setColor(mOutColor);

mOutPaint.setAntiAlias(true); //抗锯齿

mOutPaint.setStrokeWidth(mRoundWidth);

mOutPaint.setStyle(Paint.Style.STROKE); //空心圆

mTextPaint = new Paint();

mTextPaint.setTextSize(mTextSize);

mTextPaint.setColor(mTextColor);

}

2.2在ondraw方法中绘制

//绘制

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

//绘制内圆

int center = getWidth()/2;

canvas.drawCircle(center,center,center-mRoundWidth/2,mInnerPaint);

//绘制外圆

RectF rectF = new RectF(mRoundWidth/2,mRoundWidth/2,getWidth()-mRoundWidth/2,getHeight()-mRoundWidth/2);

if (mCurrentProgress == 0){

return;

}

float percent = (float)mCurrentProgress/mMax;

canvas.drawArc(rectF,0,percent*360,false,mOutPaint); //false 表示不包括圆心

//绘制文字

String textString = ((int)(percent*100))+"%";

// String textString = (mMax - (mCurrentProgress-1))+"";

Rect bounds = new Rect();

mTextPaint.getTextBounds(textString,0,textString.length(),bounds);

int dy = (mTextPaint.getFontMetricsInt().bottom-mTextPaint.getFontMetricsInt().top)/2-mTextPaint.getFontMetricsInt().bottom;

int baseLine = getHeight()/2 + dy;

canvas.drawText(textString,getWidth()/2-bounds.width()/2,baseLine,mTextPaint);

}

对圆的半径的计算不理解的可以参考这边文章:

Canvas drawCircle Rect边框问题

onmeasure方法就不介绍了,前面说了很多了。

2.3暴露给用户方法动态改变百分比的值

//暴露给外面调用 设置当前值 不断调用ondraw方法

public synchronized void setCurrentProgress(int currentProgress) {

this.mCurrentProgress = currentProgress;

invalidate();

}

在mainActivity中用设置属性动画,监听值的变化,调用此方法,绘制界面:

circleProgressView.setMax(4000);

ValueAnimator objectAnimator = ObjectAnimator.ofFloat(1,4000);

objectAnimator.setDuration(5000);

objectAnimator.start();

objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

float progress = (float) animation.getAnimatedValue();

circleProgressView.setCurrentProgress((int) progress);

}

});

三、结语

当然,这个效果也可以扩展,你可以做成别的效果,例如倒计时,代码稍微改动下就行了。分析完毕,代码地址:

http://pan.baidu.com/s/1o80TQm2

Android自定义gif进度条,Android自定义view-圆形百分比进度条效果相关推荐

  1. 圆形百分比进度条效果

    一.前言 最近有点懈怠啊,没怎么整理发布博客.今天写篇文章和大家分享一个常用的效果,圆形百分比进度条.前段时间我有个页面需要该效果,就在网上看了下,实现方式有好几种,我找了一种比较好实现的给大家一步步 ...

  2. android自定义view圆,Android自定义View圆形百分比控件(一)

    做一个自定义View的小练习,效果如下 只需要画一个圆.一个圆弧.一个百分比文本,添加一个点击事件,传入百分比重绘 1.在res/values文件夹下新建attrs.xml文件,编写自定义属性: 2. ...

  3. vue 圆形百分比进度条_快速构建一个圆形的进度条

    在一些特别生的网站上,用户需要一个可视化的是示,以表明网站资源仍然在加载.从Spinner到Skeleton屏幕有不同的方法来解决这类的用户体验效果. 如果我们使用的是开箱即用的解决方案,它为我们提供 ...

  4. vue 圆形百分比进度条_vue实用组件——圆环百分比进度条

    有需要的人可以参考一下,如果试用过,发现问题,欢迎留言告知,不胜感激. 功能介绍: 1.若页面无刷新,且第一次传值小于第二次传值或者圆环初始化时执行的是递增动画 2.若页面无刷新,且第一次传值大于第二 ...

  5. vue 圆形百分比进度条_uniapp Vue 圆环进度条

    mode="aspectFill"> export default { name: '', props: { }, data() { return { animationDa ...

  6. android 画圆弧动画,『Android自定义View实战』自定义带入场动画的弧形百分比进度条...

    写在前面 这是在简书发表的处女座,这个想法也停留在脑海中很久了,一直拖到现在(懒癌发作2333),先自我介绍一番,一枚刚毕业不久的Android程序猿,初出茅庐的Android小生,之前一直在CSDN ...

  7. android自定义进度条百分比跟着走,Android自定义View实现水平带数字百分比进度条...

    这个进度条可以反映真实进度,并且完成百分比的文字时随着进度增加而移动的,所在位置也恰好是真实完成的百分比位置,效果如下: 思路如下:第一部分是左侧的蓝色直线,代表已经完成的进度:第二部分是右侧灰色的直 ...

  8. Android自定义滑动进度条,Android自定义View实现圆形水波进度条

    每次听到某大牛谈论自定义View,顿时敬佩之心,如滔滔江水连绵不绝,心想我什么时候能有如此境界,好了,心动不如行动,于是我开始了自定义View之路,虽然过程有坎坷,但是结果我还是挺满意的.我知道大牛还 ...

  9. android自定义view 模仿win10进度条

    android自定义view 模仿win10进度条 本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. PS:有朋友反映动画无法播放,那是因为PathMeasure ...

  10. android自定义view圆环,Android自定义View实现圆环进度条

    本文实例为大家分享了android自定义view实现圆环进度条的具体代码,供大家参考,具体内容如下 效果展示 动画效果 view实现 1.底层圆环是灰色背景 2.上层圆环是红色背景 3.使用动画画一条 ...

最新文章

  1. 背包模型dp2之二维费用背包
  2. 边缘计算不再“边缘”
  3. 基于PSO的运输优化算法的MATLAB仿真
  4. lastpass安卓最新版_LastPass
  5. 64位Linux下的栈溢出
  6. ES5-12 【utils】继承深入、call、apply、圣杯模式、模块化
  7. Could not retrieve transaction isolation level from server
  8. c语言大作业 模拟泊松分布,C语言下泊松分布以及指数分布随机数生成器实现
  9. HDFS API操作的访问方式及JUnit测试类的使用
  10. Keras中文文档 评估标准Metrics
  11. 下载官方Intel的Windows 10网卡驱动
  12. Tcl 语言 ——列表篇
  13. MyBatis操作数据库
  14. Failed to send a request to Slack API server: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certif
  15. 虚幻3和虚幻4_如何成为虚幻的自动化专家
  16. C语言实验——三角形
  17. mysql 设置 sql_mode
  18. matlab里面nargin,Matlab中的nargin命令
  19. 单双号限行微信小程序源码
  20. windows客户端开发--windows api大全

热门文章

  1. python网页抓取与按键精灵原理一样吗_Python网络爬虫学习笔记之 三种网页抓取方法...
  2. python可视化编程软件下载_mPython-mPython(图形化编程软件)下载 v0.5.0官方版-下载啦...
  3. Matlab 学习入门 图像处理
  4. 中国计算机学会(CCF)推荐中文科技期刊目录
  5. Centos7安装SCIP with AMPL
  6. matlab求定积分
  7. Python基础语法(if语句)
  8. FeiQ(飞秋)更新用户列表的原理
  9. 神马js都是浮云-----限时秒杀
  10. 计算机编程语言的代码——编码