package com.mogujie.widget.imageview;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.util.AttributeSet;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Transformation;
/**
* Created by kelei on 14-2-19.
*/
public class MGWebRoundCornerImageView extends MGWebImageView implements Transformation {
private static final int DEFAULT_CORNER_SIZE = 10;
private int mCornerSize = DEFAULT_CORNER_SIZE;
public MGWebRoundCornerImageView(Context context) {
super(context);
}
public MGWebRoundCornerImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setImageUrl(String url) {
if (allowedUrl(url)/* && isAttachedOnWindow */) {
mUrl = url;
beginProcess(Picasso.with(getContext()).load(url).transform(this));
}
}
@Override
public Bitmap transform(Bitmap source) {
if (source == null) {
return null;
}
int w = source.getWidth(), h = source.getHeight();
if (w <= 0 || h <= 0) {
return null;
}
// 生成圆角
Bitmap round = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(round);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.RED);
canvas.drawRoundRect(new RectF(0, 0, w, h), mCornerSize, mCornerSize, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
// 生成结果图片
Bitmap out = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas outCanvas = new Canvas(out);
outCanvas.drawBitmap(source, 0, 0, null);
outCanvas.drawBitmap(round, 0, 0, paint);
source.recycle();
round.recycle();
return out;
}
@Override
public String key() {
return null;
}
public void setCornerSize(int cornerSize) {
mCornerSize = cornerSize;
}
}