如何在Android的绘画应用中更改默认擦除颜色?

6

我正在制作一个应用程序,在其中我希望使用事件擦除绘制的线条。为此,我使用了

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

但是在擦除一条线时,该线首先变成黑色,然后才被擦除。我希望在擦除绘图路径时使用透明颜色。


1
我也遇到了这个问题......有人能帮忙吗...? - Kalpesh
@user1287756,你有解决这个问题的办法吗? - AndroidDev
我也遇到了同样的问题。有什么解决方案吗? - Hiren Patel
3个回答

1
我已经阅读了来自APIDemos的FingerPaint.java,即android-sdk\samples\android-17\ApiDemos,并进行了修改。
@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%正确的答案,但对我而言它起作用。


这肯定是错误的,因为你正在将路径绘制到不同的画布实例上。 - EyalBellisha
@EyalBellisha,实际上对我也起作用了,因为您永久地绘制到mCanvas对象上,而仅临时绘制到onDraw画布对象上,橡皮擦立即在mCanvas对象上工作。如果我尝试在onDraw画布对象上绘制橡皮擦路径,则只有在我抬起手指后才会应用。 - kabuto178

0
以下内容适用于在透明背景上擦除...
调用SetErase(true)开始擦除。
然后OnDraw方法将绘制一个白色路径(而不是黑色),然后清除为透明颜色,您可以保留所有路径撤消信息。
调用SetErase()切换擦除开/关。
    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);
        }
    }

-1

嘿,我用了一种技巧来去除黑线。在我的橡皮擦按钮中,我将颜色设置为白色,而不是使用XferMode。

if(erase){
paintColor = Color.parseColor(newColor);
drawPaint.setColor(paintColor);
}

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