自定义View使用到PorterDuff.Mode时,往往不是预期效果,需注意以下4点:
-
1.仅支持canvas.drawBitmap,其他drawCircle,drawRect等,SRC_IN,DST_IN等效果不确定
-
2.需要关闭硬件加速 setLayerType(LAYER_TYPE_SOFTWARE,mPaint);
-
3.使用离屏缓冲
//开始离屏缓冲
int saveCount = canvas.saveLayer(offScreenRect, mPaint, Canvas.ALL_SAVE_FLAG);
//开始绘制
canvas.drawBitmap();
...
//绘制完成,还原画布
canvas.restoreToCount(saveCount);
- 4.离屏缓冲的区域offScreenRect,src的绘制区域srcRect及dst的绘制区域dstRect,最好大小一致,位置重合,否则有些Mode的效果不是预期
注:先绘制的在下层,为DST;后绘制的在上层,为SRC
如果需要drawCircle,drawRect,可采用以下方式
dstBmp = Bitmap.createBitmap(300,300, Bitmap.Config.ARGB_8888);
Canvas dstCanvas=new Canvas(dstBmp);
mPaint.setColor(Color.RED);
dstCanvas.drawRect(100,0,300,200,mPaint);
....
canvas.drawBitmap(dstBmp , null, dstRect, mPaint);
网友评论