【问题标题】:How to change default erase color in paint application in Android?如何在 Android 的绘画应用程序中更改默认擦除颜色?
【发布时间】:2012-03-30 06:11:43
【问题描述】:

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

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

但在擦除一行时,该行先变黑,然后再擦除。我想要一种透明颜色来擦除绘制路径。

【问题讨论】:

  • 我也找出了那个问题.......任何人都可以帮助......?
  • @user1287756 你有解决这个问题的办法吗?
  • 我有同样的问题。有什么解决办法吗?

标签: android graphics


【解决方案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% 正确的答案,但它对我有用。

【讨论】:

  • 这绝对是错误的,因为您正在绘制不同 Canvas 实例的路径
  • @EyalBellisha 实际上它也对我有用,因为您永久绘制到 mCanvas 对象,并且只是暂时绘制到 onDraw 画布对象,橡皮擦立即在 mCanvas 对象上工作。如果我尝试在 onDraw 画布对象上绘制橡皮擦路径,它只会在我抬起手指后应用。
【解决方案2】:

以下适用于在透明背景上擦除...

调用 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);
        }
    }

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-30
      • 2012-10-19
      • 2021-05-07
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 2016-03-05
      • 2012-07-05
      • 1970-01-01
      相关资源
      最近更新 更多