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.util.AttributeSet; import com.squareup.picasso.Picasso; import com.squareup.picasso.Transformation; /** * 圆形ImageView * * @author dolphinWang 2014/02/16 * */ public class MGWebCircleImageView extends MGWebImageView implements Transformation { public MGWebCircleImageView(Context context) { this(context, null); } public MGWebCircleImageView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void setImageUrl(String url) { if (!allowedUrl(url)) { return; } mUrl = url; if (isAttachedOnWindow) { beginProcess(Picasso.with(getContext()).load(url).transform(this)); } } @Override public void setImageUrlNeedFit(String url) { throw new RuntimeException( "MGWebCircleImageView can not use method setImageUrlNeedFit"); } @Override public void setImageUrlNeedResize(String url, int width, int height) { throw new RuntimeException( "MGWebCircleImageView can not use method setImageUrlNeedResize"); } @Override public Bitmap transform(Bitmap bitmap) { if (null == bitmap) return null; int w = bitmap.getWidth(); int h = bitmap.getHeight(); if (w <= 0 || h <= 0) { return null; } int r = (w < h ? w : h) / 2; Bitmap circle = Bitmap.createBitmap(2 * r, 2 * r, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(circle); Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); p.setColor(Color.RED); canvas.drawCircle(r, r, r, p); p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); // 生成结果图片 Bitmap out = Bitmap.createBitmap(2 * r, 2 * r, Bitmap.Config.ARGB_8888); Canvas outCan = new Canvas(out); outCan.drawBitmap(bitmap, 0, 0, null); outCan.drawBitmap(circle, 0, 0, p); circle.recycle(); bitmap.recycle(); return out; } @Override public String key() { return null; } }