我正在制作一个应用程序,在其中我希望使用事件擦除绘制的线条。为此,我使用了
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
但是在擦除一条线时,该线首先变成黑色,然后才被擦除。我希望在擦除绘图路径时使用透明颜色。
我正在制作一个应用程序,在其中我希望使用事件擦除绘制的线条。为此,我使用了
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
但是在擦除一条线时,该线首先变成黑色,然后才被擦除。我希望在擦除绘图路径时使用透明颜色。
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(0xFFAAAAAA);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
到
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(0xFFAAAAAA);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
mCanvas.drawPath(mPath, mPaint); // this line changed
// mCanvas is Canvas variable which is
// initialized in onSizeChanged()
}
现在擦除时不会绘制黑色颜色,一切都正常工作。不确定这是否是100%正确的答案,但对我而言它起作用。
public void SetErase(bool On)
{
if (On)
{
if (!_erasing)
{
_delpaint = new Paint(_paint);
_delpaint.Color = Color.White;
_paint.SetXfermode(new PorterDuffXfermode(PorterDuff.Mode.Clear));
_erasing = true;
}
}
else if (_erasing)
{
_erasing = false;
_paint.SetXfermode(null);
}
}
protected override void OnDraw(Canvas canvas)
{
canvas.DrawColor(BackgroundColor);
canvas.DrawBitmap(CanvasBitmap, 0, 0, _bitmapPaint);
if (_erasing)
{
canvas.DrawPath(_path, _delpaint); // draw white path
}
else
{
canvas.DrawPath(_path, _paint);
}
}
嘿,我用了一种技巧来去除黑线。在我的橡皮擦按钮中,我将颜色设置为白色,而不是使用XferMode。
if(erase){
paintColor = Color.parseColor(newColor);
drawPaint.setColor(paintColor);
}