我正在开发一款Android应用程序,该应用程序具有使用新Canvas(位图)功能创建的Canvas,用户可以使用他们的手指进行绘制。我遇到的问题是我找不到允许用户用手指擦除线条的方法。我搜索了Google并查看了示例FingerPaint应用程序,但使用了以下方式删除行:
setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
似乎仅适用于Canvas的纯色。我已经编写了代码来执行撤消/重做功能,但是能够只删除部分行而不是撤消分配的更改会很好。如果有人有任何想法我可以尝试我会很感激。
答案 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);
}
这将帮助您按照手指移除画布上的内容。