18

私は Android 用の描画アプリを持っており、現在、実際の消しゴムを追加しようとしています。以前は消しゴムに白い絵の具を使っていましたが、背景の色と画像を許可するようになったので、それはもうできません。これを行うには、透明なキャンバスの下に画像ビューを表示します。

私が直面している問題は、消しゴムを有効にするたびに、指を下ろしている間は真っ黒な軌跡を描きますが、離すと透明になります。以下のスクリーンショットを参照してください。

これは、私の指が画面上にあるときにどのように見えるかです - 黒い実線の軌跡 画面に指を置いたままの状態

画面から指を離すとこんな感じ 手放したらどう見えるか

ということで、近づいてきたような気もするのですが、消している最中に指が触れたままの状態で黒い軌跡を避けるための正しい組み合わせの設定が見つかりません。関連するコード スニペットを次に示します。

onDraw

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.TRANSPARENT);
    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
    canvas.drawPath(mPath, mPaint);
    canvas.drawPath(mPreviewPath, mPaint);
}

onTouchEvent

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

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            touchStart(currentX, currentY);
            invalidate();
            break;
        case MotionEvent.ACTION_MOVE:
            touchMove(currentX, currentY);
            invalidate();
            break;
        case MotionEvent.ACTION_UP:
            touchUp(currentX, currentY);
            invalidate();
            break;
    }
    return true;
}

消しゴム設定の現在の試み

public void startEraser() {
    mPaint.setAlpha(0);
    mColor = Color.TRANSPARENT;
    mPaint.setColor(Color.TRANSPARENT);
    mPaint.setStrokeWidth(mBrushSize);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setMaskFilter(null);
    mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    mPaint.setAntiAlias(true);
}

消しゴムについては他にもいくつかの投稿がありますが、それらのほとんどは を使用するように言っておりPorterDuff.Mode.CLEARsetMakFilter(null)それはうまくいくはずです。私の場合、そうではありません。何を試しても、最初に黒い軌跡を取得し、リリースした後にのみ目的の結果が得られます。

必要に応じて、さらにコードを提供できます。

4

5 に答える 5

0

キャンバスの色と同じ色の消しゴムセットを作りたいときは、実生活では透明ではありません。アンドロイドでは、ほとんどが白または黒のキャンバスのテーマカラーとしてセットペイントカラーを設定します。

mColor = Color.BLACK;
mPaint.setColor(Color.BLACK);
mPaint.setStrokeWidth(mBrushSize);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setAntiAlias(true);
于 2014-08-11T10:13:42.110 に答える