首先聲明:這個是看了一個哥們前兩天發的博客,覺得比較有意思,就模仿着寫了一遍,這裏就當作自己的學習記錄了。
package com.jsbtclient.view;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.ImageView;
public class ProgressImageView extends ImageView {
private static final String TRANSLUCENT = "#70000000";
private static final String TRANSPARENT = "#00000000";
private static final String WHITE = "#FFFFFF";
private float textSize = 100;
private int progress = 0;
private Paint paint;
public ProgressImageView(Context context) {
this(context, null);
}
public ProgressImageView(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
}
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); //調用父類畫Image
paint.setColor(Color.parseColor(TRANSLUCENT));//在ImageView 上覆蓋半透明
canvas.drawRect(0, 0, getWidth(), getHeight() - getHeight() * progress
/ 100, paint);//相對自身來說(0, 0)就是ImageView的左上角
paint.setColor(Color.parseColor(TRANSPARENT)); //接着在getHeight() * progress / 100把已經加載的進度的部分覆蓋透明
canvas.drawRect(0, 0, getWidth(), getHeight() * progress / 100, paint);
paint.setColor(Color.parseColor(WHITE)); //在圖片上繪製加載的百分比
paint.setStrokeWidth(2);
paint.setTextSize(textSize);
Rect rect = new Rect();
paint.getTextBounds("100%", 0, "100%".length(), rect);
canvas.drawText(progress + "%", (getWidth() - rect.width()) / 2,
getHeight() / 2, paint);
}
public void publishProgress(int progress) {
this.progress = progress;
invalidate();
}
public int getProgress() {
return progress;
}
public float getTextSize() {
return textSize;
}
public void setTextSize(float textSize) {
this.textSize = textSize;
}
}