如何在Android中的paint应用程序中更改默认擦除颜色?

时间:2012-03-30 06:11:44

标签: android graphics

我制作了一个应用程序,我想用事件擦除绘图线。为此我用了

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

但在删除一行时,该行首先变为黑色然后删除。我想要一个透明的颜色来擦除绘图路径。

3 个答案:

答案 0 :(得分:1)

我已经完成了 FingerPaint.java 来自 APIDemos 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%正确的答案,但它适用于我。

答案 1 :(得分:0)

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

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

答案 2 :(得分: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);
        }
    }