得到黑色的PorterDuff.Mode.DST_IN应该是透明的

时间:2014-10-29 23:19:14

标签: android canvas view transparency

如果图像透明,我会变黑......

我在Bitmap画布上使用另一个图像屏蔽图像时做了同样的事情并且它工作得很好,但是当我尝试在自定义视图的onDraw内部进行屏蔽时,它并不起作用。

我尝试了一切,在图像蒙版,路径,其他图像,所有内容之前绘制了一些内容,并且它应该是透明的。我在CLEAR模式中搜索了很多其他问题,但它没有用。

请帮助!

    mBGPaint = new Paint();
    mBGPaint.setStyle(Paint.Style.FILL);
    mBGPaint.setColor(Color.TRANSPARENT);

    mRectSrc = new Rect();
    mRectDst = new Rect();

    mask = BitmapFactory.decodeResource(getResources(), R.drawable.big_balloon_path);
    maskPaint = new Paint();
    maskPaint.setFilterBitmap(true);
    maskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

    mRectSrc.set(0, 0, mask.getWidth(),mask.getHeight() );
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    mRectDst.set(0,0,this.getMeasuredWidth(),this.getMeasuredHeight());
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.drawRect(0, 0, this.getMeasuredWidth(), this.getMeasuredHeight(), mBGPaint);
    canvas.drawBitmap(mask, mRectSrc, mRectDst, maskPaint);

1 个答案:

答案 0 :(得分:3)

您可能需要在视图的初始化中打开软件渲染:

setLayerType(LAYER_TYPE_SOFTWARE, null);

许多Android绘图命令在使用硬件渲染时默默地失败或产生不正确的结果,这是默认设置。