转载时请注明出处,尊重他人的劳动成果,谢谢。

先附上效果图:

这个控件是动态加载到75%的,主要我忘了怎么做动态图,就先放一个静态图在这里表示表示。旁边这个没有没有喜欢的?有想知道的 我可以告诉答案。

现附上代码,不懂的请留言:

package com.sahadev.circleview;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Scroller;public class CircleView extends View implements OnClickListener {private Paint outPaint, inPaint;/* The Circle's radius */private int radius = 200;/* The torus's width */private int width = 50, backgroundColor = Color.WHITE;// 默认 背景色为纯白private RectF mTempRectF = new RectF();private int mProgress;// 当前进度private int mTargetProgress = 75;// 目标进度private int mWidth = 400, mHeight = 400;// 该控件的初始大小为400*400private Scroller mScroller;// 滑动辅助类private int duration = 1000;// 动画间隔时间private int textSize = 50, mFontHeight;private float mTextWidth = 0;public CircleView(Context context) {this(context, null);}public CircleView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public CircleView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);outPaint = new Paint();inPaint = new Paint();outPaint.setTextSize(textSize);mScroller = new Scroller(context);mScroller.forceFinished(false);outPaint.setColor(Color.argb(90, 90, 90, 90));outPaint.setStyle(Paint.Style.FILL_AND_STROKE);outPaint.setAntiAlias(true);inPaint.setColor(backgroundColor);inPaint.setAntiAlias(true);setBackgroundColor(backgroundColor);FontMetrics fm = outPaint.getFontMetrics();// 得到系统默认字体属性mFontHeight = (int) (Math.ceil(fm.descent - fm.top) + 2);// 获得字体高度mFontHeight = mFontHeight - textSize;mTempRectF.set(0, 0, mWidth, mHeight);}public void setTextSize(int textSize) {this.textSize = textSize;}/** 设置背景色* * @see android.view.View#setBackgroundColor(int)*/public void setBackgroundColor(int color) {this.backgroundColor = color;}/*** 设置圆圈颜色* * @param color*/public void setCircleColor(int color) {outPaint.setColor(color);}/*** 设置圆圈半径* * @param radius*/public void setRadius(int radius) {this.radius = radius;}/*** 设置圆圈宽度* * @param width*/public void setWidth(int width) {this.width = width;}/*** 设置目标进度* * @param progress*            大于0,小于100*/public void setTargetProgress(int progress) {this.mTargetProgress = progress;}/*** 可以作为进度条设置当前进度* * @param progress*/public void setProgress(int progress) {this.mProgress = progress;postInvalidate();}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:onClick(this);return true;}return super.onTouchEvent(event);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawArc(mTempRectF, -90, 360 * mProgress / 100, true, outPaint);// 画一个扇形canvas.drawCircle(mWidth / 2, mHeight / 2, radius - width, inPaint);// 中心画一个圆mTextWidth = outPaint.measureText(mProgress + "%");canvas.drawText(mProgress + "%", (mWidth - mTextWidth) / 2, (mHeight) / 2 + mFontHeight, outPaint);}/** 获取适合的高宽* * @see android.view.View#onMeasure(int, int)*/@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);int size = 0;size = widthMeasureSpec > mWidth && heightMeasureSpec > mHeight ? (mWidth > mHeight ? mHeight : mWidth) : (widthMeasureSpec > heightMeasureSpec ? heightMeasureSpec: widthMeasureSpec);/* 该控件为正方形 */setMeasuredDimension(size, size);}/** 触动该控件 绘制到指定位置* * @see android.view.View.OnClickListener#onClick(android.view.View)*/@Overridepublic void onClick(View v) {mScroller.startScroll(0, 0, mTargetProgress, 0, duration);postInvalidate();}/*** 设置动画绘制时间* * @param duration*/public void setDuration(int duration) {this.duration = duration;}@Overridepublic void computeScroll() {super.computeScroll();if (mScroller.computeScrollOffset()) {mProgress = mScroller.getCurrX();postInvalidate();}}}

像一般自定义控件使用这个控件就可以了,具体方法相信大家都懂得,我就不贴方法了,只用设置进去就可以看到效果。

圆形进度条以及百分率指示器 Scroller类的练习相关推荐

  1. Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)

    转载请注明地址:http://blog.csdn.net/xiaanming/article/details/10298163 很多的时候,系统自带的View满足不了我们功能的需求,那么我们就需要自己 ...

  2. VC用MFC开发的圆形进度条控件

    DownLoad Src VC用MFC开发的圆形进度条控件 visualsan@yahoo.cn NUAA zss 在NBA2007游戏里,还有很多科幻电影里,经常可以看到圆形进度条.有的用来显示导弹 ...

  3. Android 自定义View,自定义属性--自定义圆形进度条(整理)

    很多的时候,系统自带的View满足不了我们的功能需求,那么我们就需要自定义View来满足我们的需求 自定义View时要先继承View,添加类的构造方法,重写父类View的一些方法,例如onDraw,为 ...

  4. android刷新时的圆形动画_Android动画篇(一):圆形进度条CircleProgressBar

    前言# 最近看框架和源码比较多,很久没有写动画了,相信很多的朋友都对动画感兴趣,我也不例外,毕竟做前端还是要靠动画特效吃饭的,并且比写功能模块更有成就感. 今天我们就来个稍微简单一点的CirclePr ...

  5. android绘制环形进度_Android动态自定义圆形进度条

    这篇文章主要介绍了Android动态自定义圆形进度条,需要的朋友可以参考下 效果图: A.绘制圆环,圆弧,文本 //1.画圆环 //原点坐标 float circleX = width / 2; fl ...

  6. ios弧形进度条_iOS手把手教你实现圆形进度条

    在做音频项目的时候,播放音频需要显示圆形进度条.今天,教大家如何简单地实现进度条效果!其实,实现这种效果并不困难.前提是需要了解UIBezierPath,如果未接触过,可以先阅读笔者在很久以前所写过的 ...

  7. 圆的css样式,圆形进度条css3样式

    30% 以下样式100upx是50upx的2倍,这是尺寸比例 .con { position: relative; display: inline-block; height: 100upx; wid ...

  8. 自定义圆形进度条 自定义倒计时进度条

    自定义圆形进度条 自定义倒计时进度条 版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 此控件源码已开源到Github:https: ...

  9. Android自定义View之画圆环(进阶篇:圆形进度条)

    前言: 如果你想读懂或者更好的理解本篇文章关于自定义圆环或圆弧的内容.请你务必提前阅读下Android自定义View之画圆环(手把手教你如何一步步画圆环).在这篇文章中,详细描述了最基本的自定义圆环的 ...

最新文章

  1. socket编程:多路复用I/O服务端客户端之poll
  2. 成功解决ValueError: If using all scalar values, you must pass an index
  3. js获取checkbox复选框获取选中的选项
  4. spring中事务控制的一组API
  5. how is Java Bean object created
  6. iOS- 如何改变section header
  7. 自定义python框架_Python web 框架Sanic 学习: 自定义 Exception
  8. 概率分布与马尔科夫链的关系讨论(上传费事)
  9. linux mint xmind运行,linux安装Xmind的经验
  10. matlab 发音,MATLAB,MATLAB language,音标,读音,翻译,英文例句,英语词典
  11. php网易云信短信接口,短信接口指南
  12. LeetCode热题HOT-100 刷题记录
  13. 计算机中的微信无法启动,微信电脑版无法直接打开EXCEL:为什么电脑打不开excel表格...
  14. 自动升降压PD快充方案 30W快充TYPE-C方案
  15. opencv3学习:reshape函数
  16. mysql定时任务,每天凌晨1点执行
  17. CheckBox选中触发事件 和 取消选中触发事件
  18. 软件著作权登记证书可以加分落户评职称评人才,不少大学不少地方把软著列入加分项,办理软件著作权需要什么流程?
  19. c语言|程序设计|指针~字母出现次数(1)
  20. Yii碰到“the file or directory to be published does not exist bower/jquery/dist”

热门文章

  1. TCP传输过程中丢包问题
  2. C++ const限定符和auto类型说明符
  3. 代码优化导致的奇葩问题
  4. mysql查询数据库第一条记录_SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)...
  5. 【Pytorch神经网络实战案例】07 预测泰坦尼克号上生存的乘客
  6. LeetCode 1534. 统计好三元组
  7. LeetCode 1276. 不浪费原料的汉堡制作方案(解方程)
  8. LeetCode 777. 在LR字符串中交换相邻字符(双指针)
  9. 服务器系统网卡驱动装不上,网卡驱动装不上去怎么办?
  10. Django搜索工具——全文检索