关于PorterDuffXferMode效果出不来的问题

来源:互联网 发布:淘宝化妆品小样真假 编辑:程序博客网 时间:2024/05/16 02:30

在官方文档中PorterDuffXferMode的效果是这样的

然而实际上当dst和src都不是bitmap的时候,效果是这样的


所以使用PorterDuffXferMode是有条件的,条件如下

1.dst和src都是bitmap。

2.绘制的图层背景必须是透明的

结论参考自http://www.myexception.cn/mobile/2059725.html,该文章有具体的分析过程。不过经过本人实验,该文章也有不正确的地方,比如硬件加速关不关闭并不影响,bitmap大小和背景色并不影响。需要注意的应该是绘制图层应该是透明的图层。

本人是这样写的

@Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);
//新建一个图层,新建的图层背景是透明的        int layerId = canvas.saveLayer(0,0,canvas.getWidth(),canvas.getHeight(),null, Canvas.ALL_SAVE_FLAG);        //把混合效果绘制在新的透明背景图层上
Paint paint = new Paint();        Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(),R.mipmap.pink);        canvas.drawBitmap(bitmap1,0,0,paint);        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.blue);        canvas.drawBitmap(bitmap,0,0,paint);        paint.setXfermode(null);
//把绘制完成的图层绘制在原来的图层上        canvas.restoreToCount(layerId);    }
这样便可得出正确的效果。


1 0
原创粉丝点击