首先贴出关键代码,onDraw(Canvas canvas)
的代码
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 使用 paint.setXfermode() 设置不同的结合绘制效果
// 别忘了用 canvas.saveLayer() 开启 off-screen buffer
canvas.saveLayer(null, null, Canvas.ALL_SAVE_FLAG);
canvas.drawBitmap(bitmap1, 0, 0, paint);
// 第一个:PorterDuff.Mode.SRC
paint.setXfermode(xfermode);
canvas.drawBitmap(bitmap2, 0, 0, paint);
canvas.drawBitmap(bitmap1, bitmap1.getWidth() + 100, 0, paint);
paint.setXfermode(xfermode1);
// 第二个:PorterDuff.Mode.DST_IN
canvas.drawBitmap(bitmap2, bitmap1.getWidth() + 100, 0, paint);
canvas.drawBitmap(bitmap1, 0, bitmap1.getHeight() + 20, paint);
paint.setXfermode(xfermode2);
// 第二个:PorterDuff.Mode.DST_IN
canvas.drawBitmap(bitmap2, 0, bitmap1.getHeight() + 20, paint);
canvas.drawBitmap(bitmap1, bitmap1.getWidth() + 100, bitmap1.getHeight() + 20, paint);
paint.setXfermode(xfermode3);
// 第二个:PorterDuff.Mode.DST_IN
canvas.drawBitmap(bitmap2, bitmap1.getWidth() + 100, bitmap1.getHeight() + 20, paint);
canvas.restore();
}
显示效果是这样的
PorterDuffXfermode(PorterDuff.Mode.SRC);
xfermode1 = new PorterDuffXfermode(PorterDuff.Mode.DST_IN);
xfermode2 = new PorterDuffXfermode(PorterDuff.Mode.DST_OUT);
xfermode3 = new PorterDuffXfermode(PorterDuff.Mode.DST_OUT);
当我把xfermode2
改成SRC_OVER
的时候,就显示成为这样了,
右下角的显示正是我的需求,但是当我把onDraw()
方法里面的第三部分代码注释掉了以后,效果又不显示了
//代码注释掉了
/* canvas.drawBitmap(bitmap1, 0, bitmap1.getHeight() + 20, paint);
paint.setXfermode(xfermode2);
// 第二个:PorterDuff.Mode.DST_IN
canvas.drawBitmap(bitmap2, 0, bitmap1.getHeight() + 20, paint);*/
在绘制多个组合bitmap的时候 在“每对”Bitmap中间插入
paint.setXfermode(null);
避免XferMode影响非目标对象