擦除画布上以Bitmap为背景的线条

时间:2012-11-08 15:39:57

标签: android bitmap line android-canvas erase

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

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

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

4 个答案:

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

重置位图。

答案 1 :(得分:0)

这很棘手但是解决方案:)。

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

答案 2 :(得分:0)

有时,将受影响像素的Alpha通道设置为透明非常简单。我忘了,如果它是0或255,因为它会根据平台而变化。

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

这将帮助您按照手指移除画布上的内容。