Android开发中自定义ProgressBar控件的方法示例
本文实例讲述了Android开发中自定义ProgressBar控件的方法。分享给大家供大家参考,具体如下:
很简单,首先加载Drawable,在onMeasure设置好其区域大小,
然后使用canvas.clipRect绘图
publicclassProgressViewextendsImageView{ privateDrawablemaskDraw; /** *加载的进度0-100 */ privateintmProcess=20; publicProgressView(Contextcontext,AttributeSetattrs){ super(context,attrs); maskDraw=context.getResources().getDrawable(R.drawable.red_bg); } @Override protectedvoidonDraw(Canvascanvas){ super.onDraw(canvas); //保存当前画笔的状态 canvas.save(); inttopline=(int)(getHeight()-getHeight()*getProcess()/100); /* *canvas剪切出一个区域,使在这个区域里面的内容是有效的,区域之外是无效的。 */ canvas.clipRect(0,topline,getWidth(),getHeight()); maskDraw.draw(canvas); //恢复到之前保存的状态 canvas.restore(); } @Override protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){ super.onMeasure(widthMeasureSpec,heightMeasureSpec); maskDraw.setBounds(0,0,getWidth(),getHeight()); } publicfloatgetProcess(){ returnmProcess; } /** *设置新的进度以后,自动刷新 */ publicvoidsetProgress(intmProcess){ if(mProcess>100){ this.mProcess=100; } if(mProcess<0){ this.mProcess=0; } this.mProcess=mProcess; invalidate(); } }
使用方法
publicclassProgressActivityextendsActivity{ privateProgressViewpiv; privateintpivDeep=0; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_progressview); piv=(ProgressView)findViewById(R.id.my_pro_iv); handler.sendEmptyMessage(2); } privateHandlerhandler=newHandler(){ @Override publicvoidhandleMessage(Messagemsg){ switch(msg.what){ case1: piv.setProgress(pivDeep); break; case2: newThread(){ publicvoidrun(){ while(true){ pivDeep=(pivDeep+5)%100; handler.sendEmptyMessage(1); try{ Thread.sleep(200); }catch(InterruptedExceptione){ e.printStackTrace(); } } }; }.start(); break; default: break; } } }; }
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android窗口相关操作技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。