我们在开发中 有时候会遇到 点击一个图标然后进行下载 并且需要在图标上面加上进度条 像下面这样的效果
先说下这个效果的实现,首先我们使用自定义view,在onDraw()方法中使用画笔画出外面的进度条
mPaint.setAntiAlias(true);
mPaint.setColor(Color.rgb(0xe9, 0xe9, 0xe9));
canvas.drawColor(Color.TRANSPARENT);
mPaint.setStrokeWidth(mWidth);
mPaint.setStyle(Paint.Style.STROKE);
mRectF.right = width/2 + mRadius;
mRectF.left = width/2-mRadius;
mRectF.bottom = height/2 + mRadius;
mRectF.top = height/2-mRadius;
canvas.drawArc(mRectF, -90, 360, false, mPaint);
mPaint.setColor(mColor);
canvas.drawArc(mRectF, -90, ((float) mProgress / mMaxProgress) * 360,
false, mPaint);
其中mProgress 和mMaxProgress就是控制进度条的完成情况。使用下载时,通过设置mProgress 的大小,来完成进度条的更新。我在demo中模拟的是假数据,使用Timer来模拟下载更新。
Handler mhandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (mProgress < mMaxProgress)
mProgress++;
else {
isLoading = false;
mProgress = 0;
timer.cancel();
}
invalidate();
break;
}
}
};
@Override
public void onClick(View v) {
if (isLoading) {
timer.cancel();
} else {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
mhandler.sendEmptyMessage(1);
}
}, 200, 200);
}
isLoading = !isLoading;
}
基本上都讲的差不多,大体就是这么个原理 ,大家可以通过我这个demo来进行更改,达到大家想实现的效果。下面是demo的地址
http://download.csdn.net/detail/baidu_33853807/9879089