请教一下PorterDuffXfermode会互相影响吗?
首先贴出关键代码,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);*/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在绘制多个组合bitmap的时候 在“每对”Bitmap中间插入
paint.setXfermode(null);
避免XferMode影响非目标对象