Android自定义View---圆形进度条
来源:互联网 发布:linux 远程连接问题 编辑:程序博客网 时间:2024/04/30 21:01
原理非常简单,在自定义View的基础上使用Canvas的drawCircle画两个圆,一个圆代表总体,一个圆代表现有进度,在主线程中使用set方法在Handler中传递进度,进度和总体都可以添加set、get方法进行自定义
//主线程代码如下public class MainActivity extends Activity {private Button mBtn_start;private MyProgresscircle myProgresscircle;private int progress;private Handler handler=new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what){case 0:progress++;if(progress<=100){//形成循环myProgresscircle.setCurrentProgress(progress);//传递进度handler.sendEmptyMessageDelayed(0,200);//模拟下载延迟 }break; } } };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);myProgresscircle= (MyProgresscircle) findViewById(R.id.myprogress);mBtn_start= (Button) findViewById(R.id.button_start);mBtn_start.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {handler.sendEmptyMessage(0);//启动下载发送一个空消息开始 } }); }}//自定义View代码:public class MyProgresscircle extends View {private int width;private int height;private Paint mPaintText;private Paint mPaintCircle;private Paint mPaintCircleCurrent;private int CurrentProgress;private int MaxProgress=100;public void setCurrentProgress(int currentProgress) {CurrentProgress = currentProgress; invalidate(); }public int getMaxProgress() {return MaxProgress; }public void setMaxProgress(int maxProgress) {MaxProgress = maxProgress; }public MyProgresscircle(Context context) {super(context); }public MyProgresscircle(Context context, AttributeSet attrs) {super(context, attrs);mPaintText=new Paint();//字体进度画笔mPaintText.setTextSize(80);mPaintText.setColor(Color.WHITE);mPaintText.setStrokeWidth(10);mPaintText.setTextAlign(Paint.Align.CENTER);//偏移mPaintCircle=new Paint();//外圆画笔mPaintCircle.setColor(Color.GRAY);mPaintCircle.setAntiAlias(true);mPaintCircle.setStrokeWidth(10);mPaintCircleCurrent=new Paint();//进度圆画笔mPaintCircleCurrent.setColor(Color.YELLOW);mPaintCircleCurrent.setAntiAlias(true);mPaintCircleCurrent.setStrokeWidth(10); }@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {//这个复写方法用来得到宽和高super.onMeasure(widthMeasureSpec, heightMeasureSpec);width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec); setMeasuredDimension(width, height); }@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas); canvas.drawCircle(width / 2, height / 2, 200, mPaintCircle); canvas.drawCircle(width/2,height/2,CurrentProgress/100f*200,mPaintCircleCurrent); canvas.drawText(CurrentProgress*100f/MaxProgress+"%",width/2,height/2,mPaintText);//把进度转化为百分比 }}
0 0
- android 圆形进度条 自定义view
- android 自定义view 圆形进度条
- Android自定义View---圆形进度条
- Android-------自定义View圆形进度条
- Android自定义view(圆形进度条)
- Android自定义view圆形进度条
- Android自定义view圆形进度条
- Android自定义View-圆形进度条
- 自定义View实现Android圆形进度条
- Android 自定义view --圆形百分比(进度条)
- Android 自定义圆形进度条(圆环刻度)View
- Android自定义View之圆形进度条
- Android 自定义view --圆形百分比(进度条)
- Android自定义View--圆形进度条RoundProgress
- 【Android自定义view系列】圆形百分比进度条
- Android-自定义View之圆形进度条总结
- Android 自定义 View 圆形进度条总结
- Android 自定义 View 圆形进度条总结
- Summary Ranges
- 算法之每日一题:替换字符串空格
- 枚举法 4 —— 《实用算法基础教程》
- spring配置文件各个属性详解
- 对链表进行排序(不能额外空间,时间为O(NL))
- Android自定义View---圆形进度条
- Android面试准备:自定义控件
- js变量初始化影响关键字导致frame跳转出错
- uC/OS-ii在M3中的任务切换与任务堆栈
- 分支界限法
- Windows窗体Winform----show()与showDialog()的区别
- 数据库系统概论学习笔记------讲4除法运算
- UVa 11149 - Power of Matrix
- iOS开发笔记--UILabel的相关属性设置