package com.safly.myapplication;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Xfermode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
/**
* Created by Administrator on 2017/4/24.
*/
public class CustomeImageView extends View {
private Context mContext;
Bitmap logoBitmap;
private int logoWidth;
private int logoHeight;
private int circleRadius;
private Paint mReactPaint;
private int offSize;
int measureWeight;
int measureHeight;
public CustomeImageView(Context context) {
super(context);
}
public CustomeImageView(Context context, AttributeSet attrs) {
super(context, attrs);
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
this.mContext = context;
initRes();
}
public CustomeImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void measureLogo() {
logoBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.logo);
logoHeight = logoBitmap.getHeight();
logoWidth = logoBitmap.getWidth();
int i = logoHeight * logoHeight + logoWidth * logoWidth;
circleRadius = (int) Math.sqrt(i)/2;
offSize = circleRadius - logoWidth/2;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int Wmode = MeasureSpec.getMode(widthMeasureSpec);
int Wsize = MeasureSpec.getSize(widthMeasureSpec);
int Hmode = MeasureSpec.getMode(heightMeasureSpec);
int Hsize = MeasureSpec.getSize(widthMeasureSpec);
measureWeight = 0;
measureHeight = 0;
//宽度
if (Wmode == MeasureSpec.AT_MOST) {
measureWeight = circleRadius*2;
}else if(Wmode == MeasureSpec.EXACTLY){
measureWeight = Wsize;
}
//高度
if (Hmode == MeasureSpec.AT_MOST) {
measureHeight = circleRadius*2;
}else if(Hmode == MeasureSpec.EXACTLY){
measureHeight = Hsize;
}
setMeasuredDimension(measureWeight,measureHeight);
}
private void initRes() {
//获取图片的尺寸
measureLogo();
//粉色
if (mReactPaint == null){
mReactPaint = new Paint();
mReactPaint.setColor(Color.parseColor("#FF6A6A"));
mReactPaint.setAntiAlias(true);
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// canvas.drawColor(Color.parseColor("#ffffff"));
Bitmap destBitmap = Bitmap.createBitmap(logoWidth,logoHeight, Bitmap.Config.ARGB_8888);
Canvas destCanvas = new Canvas(destBitmap);
RectF rect = new RectF(0,0,logoWidth,logoHeight);
destCanvas.drawRect(rect,mReactPaint);
canvas.drawBitmap(destBitmap,offSize,offSize,null);
Bitmap srcBitmap = Bitmap.createBitmap(measureWeight,measureHeight, Bitmap.Config.ARGB_8888);
Canvas srcCanvas = new Canvas(srcBitmap);
srcCanvas.drawCircle(measureWeight/2,measureHeight/2,circleRadius,mReactPaint);
mReactPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(srcBitmap,0,0,mReactPaint);
}
}
注意setXfermode顺序,在drawCircle之后!!!!!!!!!!
效果如下
改成
mReactPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));