package com.darongtong.drtproject.view.imageview;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.util.AttributeSet;
import com.darongtong.drtproject.view.CircleImageView;
/**
* 带处理进度的圆形ImageView
* @author WalterWang
*
*/
public class ProgressCircleImageView extends CircleImageView {
private Paint mPaint;// 画笔
private Paint mBitPaint;// 画图像
Context context;
/**
* 图像处理进度
*/
int progress = 0;
public ProgressCircleImageView(Context context) {
this(context, null);
}
public ProgressCircleImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ProgressCircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context = context;
mPaint = new Paint();
// 初始化paint
mBitPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mBitPaint.setFilterBitmap(false);
mBitPaint.setDither(true);
}
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setAntiAlias(true); // 消除锯齿
mPaint.setFilterBitmap(false);
mPaint.setStyle(Paint.Style.FILL);
if (progress > 0 && progress<100){
// 保存为单独的层
int saveCount = canvas.saveLayer(0, 0, getWidth(), getHeight(), mBitPaint, Canvas.ALL_SAVE_FLAG);
canvas.drawBitmap(makeDst(), 0, 0, mBitPaint);
mBitPaint.setXfermode(new PorterDuffXfermode(Mode.DST_OUT));
if (getHeight() > getWidth()) {
canvas.drawBitmap(makeSrc(), 0,
(getHeight() - getWidth() * progress / 100) - (((getHeight() - getWidth()) / 2)), mBitPaint);
} else {
canvas.drawBitmap(makeSrc(), 0, getHeight() - getHeight() * progress / 100, mBitPaint);
}
mBitPaint.setXfermode(null);
canvas.restoreToCount(saveCount);
}
/**
* 如果是非圆形图形用下面代码
*/
// mPaint.setColor(Color.parseColor("#55000000"));
// canvas.drawRect(0, 0, getWidth(),
// getHeight()-getHeight()*progress/100, mPaint);
// canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mPaint);
// mPaint.setColor(Color.parseColor("#00000000"));//全透明
// canvas.drawRect(0, getHeight()-getHeight()*progress/100, getWidth(),
// getHeight(), mPaint);
/**
mPaint.setTextSize(30);
mPaint.setColor(Color.parseColor("#FFFFFF"));
mPaint.setStrokeWidth(2);
Rect rect = new Rect();
mPaint.getTextBounds("100%", 0, "100%".length(), rect);
canvas.drawText(progress + "%", getWidth() / 2 - rect.width() / 2, getHeight() / 2, mPaint);
*/
}
/**
* 创建一个矩形bitmap,作为src图
*
* @return
*/
private Bitmap makeSrc() {
Bitmap bm = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bm);
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.parseColor("#FFFFFF"));
c.drawRect(0, 0, getWidth(), getHeight(), p);
return bm;
}
/**
* 创建一个圆形bitmap,作为dst图
*
* @return
*/
private Bitmap makeDst() {
Bitmap bm = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bm);
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.parseColor("#55000000"));
c.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, p);
return bm;
}
/**
* 设置进度
* @param progress
*/
public void setProgress(int progress) {
this.progress = progress;
postInvalidate();
};
}
《Android-圆形图片处理(上传)进度显示》
最新推荐文章于 2022-10-31 18:54:24 发布