Android自定义gif进度条,Android自定义view-圆形百分比进度条效果
一、概述
今天接着研究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-圆形百分比进度条效果相关推荐
- 圆形百分比进度条效果
一.前言 最近有点懈怠啊,没怎么整理发布博客.今天写篇文章和大家分享一个常用的效果,圆形百分比进度条.前段时间我有个页面需要该效果,就在网上看了下,实现方式有好几种,我找了一种比较好实现的给大家一步步 ...
- android自定义view圆,Android自定义View圆形百分比控件(一)
做一个自定义View的小练习,效果如下 只需要画一个圆.一个圆弧.一个百分比文本,添加一个点击事件,传入百分比重绘 1.在res/values文件夹下新建attrs.xml文件,编写自定义属性: 2. ...
- vue 圆形百分比进度条_快速构建一个圆形的进度条
在一些特别生的网站上,用户需要一个可视化的是示,以表明网站资源仍然在加载.从Spinner到Skeleton屏幕有不同的方法来解决这类的用户体验效果. 如果我们使用的是开箱即用的解决方案,它为我们提供 ...
- vue 圆形百分比进度条_vue实用组件——圆环百分比进度条
有需要的人可以参考一下,如果试用过,发现问题,欢迎留言告知,不胜感激. 功能介绍: 1.若页面无刷新,且第一次传值小于第二次传值或者圆环初始化时执行的是递增动画 2.若页面无刷新,且第一次传值大于第二 ...
- vue 圆形百分比进度条_uniapp Vue 圆环进度条
mode="aspectFill"> export default { name: '', props: { }, data() { return { animationDa ...
- android 画圆弧动画,『Android自定义View实战』自定义带入场动画的弧形百分比进度条...
写在前面 这是在简书发表的处女座,这个想法也停留在脑海中很久了,一直拖到现在(懒癌发作2333),先自我介绍一番,一枚刚毕业不久的Android程序猿,初出茅庐的Android小生,之前一直在CSDN ...
- android自定义进度条百分比跟着走,Android自定义View实现水平带数字百分比进度条...
这个进度条可以反映真实进度,并且完成百分比的文字时随着进度增加而移动的,所在位置也恰好是真实完成的百分比位置,效果如下: 思路如下:第一部分是左侧的蓝色直线,代表已经完成的进度:第二部分是右侧灰色的直 ...
- Android自定义滑动进度条,Android自定义View实现圆形水波进度条
每次听到某大牛谈论自定义View,顿时敬佩之心,如滔滔江水连绵不绝,心想我什么时候能有如此境界,好了,心动不如行动,于是我开始了自定义View之路,虽然过程有坎坷,但是结果我还是挺满意的.我知道大牛还 ...
- android自定义view 模仿win10进度条
android自定义view 模仿win10进度条 本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. PS:有朋友反映动画无法播放,那是因为PathMeasure ...
- android自定义view圆环,Android自定义View实现圆环进度条
本文实例为大家分享了android自定义view实现圆环进度条的具体代码,供大家参考,具体内容如下 效果展示 动画效果 view实现 1.底层圆环是灰色背景 2.上层圆环是红色背景 3.使用动画画一条 ...
最新文章
- 背包模型dp2之二维费用背包
- 边缘计算不再“边缘”
- 基于PSO的运输优化算法的MATLAB仿真
- lastpass安卓最新版_LastPass
- 64位Linux下的栈溢出
- ES5-12 【utils】继承深入、call、apply、圣杯模式、模块化
- Could not retrieve transaction isolation level from server
- c语言大作业 模拟泊松分布,C语言下泊松分布以及指数分布随机数生成器实现
- HDFS API操作的访问方式及JUnit测试类的使用
- Keras中文文档 评估标准Metrics
- 下载官方Intel的Windows 10网卡驱动
- Tcl 语言 ——列表篇
- MyBatis操作数据库
- Failed to send a request to Slack API server: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certif
- 虚幻3和虚幻4_如何成为虚幻的自动化专家
- C语言实验——三角形
- mysql 设置 sql_mode
- matlab里面nargin,Matlab中的nargin命令
- 单双号限行微信小程序源码
- windows客户端开发--windows api大全
热门文章
- python网页抓取与按键精灵原理一样吗_Python网络爬虫学习笔记之 三种网页抓取方法...
- python可视化编程软件下载_mPython-mPython(图形化编程软件)下载 v0.5.0官方版-下载啦...
- Matlab 学习入门 图像处理
- 中国计算机学会(CCF)推荐中文科技期刊目录
- Centos7安装SCIP with AMPL
- matlab求定积分
- Python基础语法(if语句)
- FeiQ(飞秋)更新用户列表的原理
- 神马js都是浮云-----限时秒杀
- 计算机编程语言的代码——编码