/**
* Created by lz on 2018/10/29.
* 功能描述: 自定义绘制圆形图片
*/
public class CircleImageView extends View {
private static final float WIDTH = Utils.dp2px(300);
private static final float PADDING = Utils.dp2px(50);
private static final float EDGE_WIDTH = Utils.dp2px(10);
Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
private Bitmap mBitmap;
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
RectF saveArea = new RectF();
public CircleImageView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
{
mBitmap = getAvatar((int) WIDTH);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
saveArea.set(PADDING,PADDING,PADDING+WIDTH,PADDING+WIDTH);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//canvas.drawOval(PADDING,PADDING,PADDING+WIDTH,PADDING+WIDTH,paint);
//https://blog.csdn.net/cquwentao/article/details/51423371
int saved = canvas.saveLayer(saveArea,paint);
//canvas.drawOval(PADDING+EDGE_WIDTH,PADDING+EDGE_WIDTH,PADDING+WIDTH-EDGE_WIDTH,PADDING+WIDTH-EDGE_WIDTH,paint);
canvas.drawOval(PADDING,PADDING,PADDING+WIDTH,PADDING+WIDTH,paint);
paint.setXfermode(xfermode);
canvas.drawBitmap(mBitmap,PADDING,PADDING,paint);
paint.setXfermode(null);
canvas.restoreToCount(saved);
}
Bitmap getAvatar(int width) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.img, options);
options.inJustDecodeBounds = false;
options.inDensity = options.outWidth;
options.inTargetDensity = width;
return BitmapFactory.decodeResource(getResources(), R.drawable.img, options);
}
}