java - FingerPaint 删除显示黑线

标签 java android graphics

早上好

我的部分应用程序具有写下一些手写笔记的功能。我正在使用 fingerpaint 示例中的 fragment 在我的应用程序中实现“橡皮擦”:

mPaint.setXfermode(new PorterDuffXfermode(
        PorterDuff.Mode.CLEAR));
mPaint.setStrokeWidth(45);
mPaint.setStrokeCap(Paint.Cap.ROUND);

问题是每当我删除时,用户删除的地方都会有一条黑色路径。一旦用户拿起手指,它就消失了,但在他们删除时它就在那里。我的 friend 告诉我 PorterDuff 模式不应该实时使用,但我不相信他。这是我的一些代码,以防我做了一些愚蠢的事情:

mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(false);
mPaint.setColor(Color.BLACK);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.BUTT);
mPaint.setStrokeWidth(6);
mBitmap = Bitmap.createBitmap(800, 480,Bitmap.Config.ARGB_8888);
bBitmap = Bitmap.createBitmap(800, 480,Bitmap.Config.ARGB_8888);
bBitmap.eraseColor(Color.WHITE);
mCanvas = new Canvas(mBitmap);
mPath = new Path();
mBitmapPaint = new Paint();
maxX = maxY = 100;
minX = 750;
minY = 400;

//

private void touch_up() {
    mPath.lineTo(mX, mY);
    mCanvas.drawPath(mPath, mPaint);
    mPath.reset();
}

//

protected void onDraw(Canvas canvas) {    
    canvas.drawBitmap(bBitmap, 0, 0, null);
    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
    canvas.drawPath(mPath, mPaint);
}

是否可以做我想让这个橡皮擦做的事情?有一个更好的方法吗?我的 friend 真的是对的吗?

我也尝试过只涂白色作为删除,但它不会起作用,因为有时用户正在标记下面的图像。我可以通过并使每个白色像素透明,但这似乎非常低效。

最佳答案

我找到了一种正确执行此操作的方法,它可以用手指删除,没有黑色笔划。 这是我的解决方案:

@Override
public boolean onTouchEvent(MotionEvent event) {
    float x = event.getX();
    float y = event.getY();

    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        if(isEraseMode()){
            mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        }
        touch_start(x, y);
        invalidate();
        break;
    case MotionEvent.ACTION_MOVE:
        touch_move(x, y);
        if(isEraseMode()){
            mPath.lineTo(mX, mY);
            mCanvas.drawPath(mPath, mPaint);
            mPath.reset();
            mPath.moveTo(x, y);            
                }
        invalidate();
        break;
    case MotionEvent.ACTION_UP:
        touch_up();
        invalidate();
        break;
    }
    return true;
}  

关于java - FingerPaint 删除显示黑线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13566837/

相关文章:

java - 为什么eclipse高亮java行?

java - 使用迭代器将对象添加到链表

android - Android 中的同步适配器

r - 有没有办法从连续变量绘制频率直方图?

java - 从 Mathematica 到 Java 的图像

java - 将 String 转换为 readUTF() 期望的格式

java - JFileChooser 和 FileDialog 的 UIManager 键是什么?

java - 如何获取正在从 Android 中的下载管理器下载的文件的网络 uri

Android:有没有办法禁用通知 bundle ?

Scala - 简单地将 2D 数组写入屏幕的最简单的 2D 图形?