1

我正在开发一个 Android 应用程序,该应用程序具有使用用户可以使用手指绘制的新 Canvas(bitmap) 函数创建的 Canvas。我遇到的问题是我找不到允许用户用手指擦除线条的方法。我搜索了谷歌并查看了示例 FingerPaint 应用程序,但他们使用以下方式擦除线条:

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

似乎仅适用于 Canvas 的纯色。我已经编写了代码来执行撤消/重做功能,但是能够只擦除部分行而不是撤消分配的更改会很好。如果有人有任何想法,我可以尝试,我将不胜感激。

4

4 回答 4

1
public void resetBitmapCanvasAndPath() {
    // TODO Auto-generated method stub
    mDrawingUtilities.mBitmap = Bitmap.createBitmap(Constants.SCREEN_WIDTH,Constants.SCREEN_HEIGHT ,
            Bitmap.Config.ARGB_8888);

        //Log.d("BITMAP","Restoring...");
        //mBitmap=BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 

    mDrawingUtilities.mCanvas = new Canvas(mDrawingUtilities.mBitmap);

    mDrawingUtilities.mPath = new Path();
}

重置位图。

于 2012-11-08T15:42:56.223 回答
0

有时就像将受影响像素的 Alpha 通道设置为透明一样简单。我忘记了它是 0 还是 255,因为它会根据平台而变化。

于 2012-11-08T16:28:47.953 回答
0

这很棘手,但有一个解决方案:)。

在擦除模式下,您的位图填充颜色可能与背景颜色相同(例如白色)。用户可以用背景颜色绘制,所以就像删除一样。:) (DrawSomething 就是这样)。

于 2012-11-08T15:50:47.407 回答
0

这就是您可以使用 SetXfermode() 的方式:

        if (view.getId()== R.id.erase_btn){  erase_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onDraw.setErase(true);
            }
        }


 public void setErase(boolean isErase){
    erase=isErase;
    if(erase) drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    else drawPaint.setXfermode(null);
}

这将帮助您在手指之后删除画布上的内容。

于 2015-11-19T09:36:48.380 回答