Android怎么自定义View实现圆形进度条(android,view,开发技术)

时间:2024-05-03 13:01:41 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

原理非常简单,在自定义View的基础上使用Canvas的drawCircle画两个圆,一个圆代表总体,一个圆代表现有进度,在主线程中使用set方法在Handler中传递进度,进度和总体都可以添加set、get方法进行自定义

Android怎么自定义View实现圆形进度条

//主线程代码如下publicclassMainActivityextendsActivity{privateButtonmBtn_start;privateMyProgresscirclemyProgresscircle;privateintprogress;privateHandlerhandler=newHandler(){@OverridepublicvoidhandleMessage(Messagemsg){super.handleMessage(msg);switch(msg.what){case0:progress++;if(progress<=100){//形成循环myProgresscircle.setCurrentProgress(progress);//传递进度handler.sendEmptyMessageDelayed(0,200);//模拟下载延迟}break;}}};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){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(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){handler.sendEmptyMessage(0);//启动下载发送一个空消息开始}});}}//自定义View代码:publicclassMyProgresscircleextendsView{privateintwidth;privateintheight;privatePaintmPaintText;privatePaintmPaintCircle;privatePaintmPaintCircleCurrent;privateintCurrentProgress;privateintMaxProgress=100;publicvoidsetCurrentProgress(intcurrentProgress){CurrentProgress=currentProgress;invalidate();}publicintgetMaxProgress(){returnMaxProgress;}publicvoidsetMaxProgress(intmaxProgress){MaxProgress=maxProgress;}publicMyProgresscircle(Contextcontext){super(context);}publicMyProgresscircle(Contextcontext,AttributeSetattrs){super(context,attrs);mPaintText=newPaint();//字体进度画笔mPaintText.setTextSize(80);mPaintText.setColor(Color.WHITE);mPaintText.setStrokeWidth(10);mPaintText.setTextAlign(Paint.Align.CENTER);//偏移mPaintCircle=newPaint();//外圆画笔mPaintCircle.setColor(Color.GRAY);mPaintCircle.setAntiAlias(true);mPaintCircle.setStrokeWidth(10);mPaintCircleCurrent=newPaint();//进度圆画笔mPaintCircleCurrent.setColor(Color.YELLOW);mPaintCircleCurrent.setAntiAlias(true);mPaintCircleCurrent.setStrokeWidth(10);}@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){//这个复写方法用来得到宽和高super.onMeasure(widthMeasureSpec,heightMeasureSpec);width=getDefaultSize(getSuggestedMinimumWidth(),widthMeasureSpec);height=getDefaultSize(getSuggestedMinimumHeight(),heightMeasureSpec);setMeasuredDimension(width,height);}@OverrideprotectedvoidonDraw(Canvascanvas){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);//把进度转化为百分比}}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Android怎么自定义View实现圆形进度条的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:MySql存储过程循环使用的方法下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18