PorterDuff.Mode 使用注意事项

自定义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);

你可能感兴趣的:(PorterDuff.Mode 使用注意事项)