Android怎么自定义View实现圆形进度条
导读:本文共1693字符,通常情况下阅读需要6分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 原理非常简单,在自定义View的基础上使用Canvas的drawCircle画两个圆,一个圆代表总体,一个圆代表现有进度,在主线程中使用set方法在Handler中传递进度,进度和总体都可以添加set、get方法进行自定义//主线程代码如下publicclassMainActivityextendsActivity{privateButtonmBtn_st... ...
音频解说
目录
(为您整理了一些要点),点击可以直达。原理非常简单,在自定义View的基础上使用Canvas的drawCircle画两个圆,一个圆代表总体,一个圆代表现有进度,在主线程中使用set方法在Handler中传递进度,进度和总体都可以添加set、get方法进行自定义
//主线程代码如下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实现圆形进度条的详细内容,希望对您有所帮助,信息来源于网络。