canvas.drawRect是黑色而不是透明

时间:2014-02-27 17:08:30

标签: android android-canvas android-view

我正在尝试画一些装满某种苏打水的玻璃杯。我有一个PNG的玻璃图像非常透明,我想用一种颜色填充它的一部分。

这是我到目前为止所做的:

glassRect = new Rect(0, 0, 800, 1100);
colorRect = new Rect(0, 800, 800, 1100);



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

    Paint imagePaint = new Paint();
    imagePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));


    Paint colorPaint = new Paint();
    colorPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER));
    colorPaint.setColor(Color.argb(255, 160, 85, 45));

    canvas.drawBitmap(glassBitmap, null, glassRect, imagePaint);
    canvas.drawRect(colorRect, colorPaint);
}

但是这给了我这个: enter image description here

玻璃的一部分变黑了而不是保持透明

我该如何解决这个问题?或者我不是这样做的吗?请告诉我:))

1 个答案:

答案 0 :(得分:0)

在app的manifest.xml上添加以下代码;

<application
        android:hardwareAccelerated="false"
        ...
</application>

链接中的相关句子 - http://developer.android.com/guide/topics/graphics/hardware-accel.html#controlling;

“...如果您的应用程序仅使用标准视图和Drawables,则全局打开它不会导致任何不利的绘图效果。但是,由于所有2D绘图操作都不支持硬件加速,因此打开它可能会影响一些自定义视图或绘图调用。“