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

先附上效果图:

这个控件是动态加载到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. spaCy教程(翻译自官网)
  2. 从菜鸟到专家的五步编程语言学习法
  3. js uri解码_js进行URL编码(escape,encodeURI,encodeURIComponent)
  4. spring mvc静态资源访问的配置
  5. TypeScript 2 : 获取当前日期及前后范围日期【Array】
  6. 贴吧粉丝怎么全部移除_教程:高达模型贴大面积的水贴纸张要如何操作
  7. silverlight Balder 动态材质(用网上的图片)
  8. shell编程基础(三): 位置参数与shell脚本的输入输出
  9. Atitit 提升稳定性 数据库死锁 目录 1.1. 配置数据库死锁检测超时时间从默认50s到10s 1 1.2. 调整隔离级别到read commit 1 1.3. mysql数据库连接使用完毕
  10. MAC终端命令自动补全
  11. 局域网打印机共享怎么设置_局域网共享精灵 局域网内便节共享文件和打印机...
  12. 使用freessl.orgq免费ssl证书
  13. 充电器pps功能是什么_科普:PPS充电器为何不兼容笔电?
  14. 2012湘潭ICPC邀请赛感悟
  15. MySQL 数据库设计范式/优化
  16. java 撤销恢复按钮_java文本的撤销和恢复
  17. 计算机初级培训教学大纲,计算机初级培训教学大纲.doc
  18. 在xp下加载正常的dll,在win7下loadlibrary失败,返回错误值998(ERROR_NOACCESS)的解决办法
  19. 【单片机毕业设计】【mcuclub-jj-050】基于单片机的门禁的设计
  20. MySQL数据库服务的简单开启和关闭

热门文章

  1. “元宇宙” 是什么东西?
  2. 让这个该死的服务跑起来了~
  3. GetDlgItem
  4. python模块讲解_python模块详解
  5. 第一周:深度学习引言(Introduction to Deep Learning)
  6. Django模板中如何将函数的变量作为字典key并获取对应的value
  7. React Hooks的使用(三)——useRef、useImperativeHandle、useLayoutEffect解析、自定义Hook
  8. WebSocket实现实时通信
  9. LeetCode 1899. 合并若干三元组以形成目标三元组
  10. 天池 在线编程 最大子树(自底向上)