在Android上使用透明涂料绘画

8
当我在Android的普通2D画布上使用带有Color.TRANSPARENT的Paint时,我没有得到任何结果,而我的意图是要摆脱画布上的一些内容。我的意思是,我想要处理的内容并没有消失。
这是我Paint的代码:
mPointFillPaint = new Paint();
mPointFillPaint.setColor(Color.TRANSPARENT);
mPointFillPaint.setAntiAlias(true);
mPointFillPaint.setStyle(Paint.Style.FILL);
mPointFillPaint.setStrokeJoin(Paint.Join.MITER); 
2个回答

10
以下Paint配置应该会有所帮助:
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(Color.TRANSPARENT);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));
mPaint.setAntiAlias(true);

我已经使用了您的代码,但这个代码删除了下面绘制对象的某些点。比如当我画一条线,然后再次在上一条线的上方画一条新线,最后按下撤销按钮时,第二条线画在第一条线上方的点被切掉了。我该如何解决这个问题? - Mohit Arora

4
我发现使用
mPaint.setColor(Color.TRANSPARENT);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));

或者

mPaint.setColor(Color.TRANSPARENT);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

我刚把我的画笔涂成黑色了。

我还有另一种方法,就是在我的colors.xml中引入一个透明的颜色。

    <color name="transparentColor">#00ffffff</color>

我选择了 "00ffffff" 的情况,但我相信 "00000000" 也可以工作,这取决于您的具体情况。

最终代码如下:

    mPaint = new Paint();
    mPaint.setAntiAlias(true);
    mPaint.setColor(getResources().getColor(R.color.transparentColor));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接