package com.mcxtzhang.cstviewdemo.widget; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.util.AttributeSet; import android.view.View; import com.mcxtzhang.cstviewdemo.R; /** * 介绍: * 作者:zhangxutong * 邮箱:mcxtzhang@163.com * CSDN:http://blog.csdn.net/zxt0601 * 时间: 16/11/24. */ public class AvoidXfermodeView extends View { private Paint mPaint; public AvoidXfermodeView(Context context, AttributeSet attrs) { super(context, attrs); mPaint = new Paint(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 图片的遮罩 Bitmap mask = BitmapFactory.decodeResource(getResources(), R.drawable.icon_delete); /* * 将绘制操作保存到新的图层(更官方的说法应该是离屏缓存) */ int sc = canvas.saveLayer(0, 0, 720, 1080, null, Canvas.ALL_SAVE_FLAG); // 先绘制一层颜色 canvas.drawColor(0xFF8f66DA); // 设置混合模式 mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); // 再绘制src源图 canvas.drawBitmap(mask, 180, 200, mPaint); // 还原混合模式 mPaint.setXfermode(null); // 还原画布 canvas.restoreToCount(sc); } }