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程序设计有所帮助。