我制作了一个应用程序,我想用事件擦除绘图线。为此我用了
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
但在删除一行时,该行首先变为黑色然后删除。我想要一个透明的颜色来擦除绘图路径。
答案 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);
}
}