0

私は私のアンドロイドプロジェクトでいくつかの助けが必要です。私はキャンバスを持っていて、それをビットマップで埋めています。キャンバスに線を引くポインタがあります。私の問題は、以前に描いた線をどのようにきれいにするかです。キャンバスでどのメソッドを呼び出す必要がありますか?私は試しましたがCanvas.drawColor()、うまくいきinvalidate()ません。

との機能は何ですかとCanvas.drawColor()私の問題を解決するのを手伝ってください。前もって感謝します

アップデート!このようなコードを作成した場合:

@Override
protected void onDraw(Canvas canvas) {
    // fills the canvas with black
    canvas.drawColor(Color.BLACK);

    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);

    canvas.drawPath(mPath, p);

    obaby.draw(canvas);
}

コードのどこに配置invalidate()しますか?ボタンを使用してキャンバスをクリアしたい場合、どのコードを使用する必要がありますか?

アップデート!

私は自分のonDrawを次のように書きました:

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.BLACK);  
    if(letsdraw){
        canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
        canvas.drawPath(mPath, p);
        obaby.draw(canvas);
    }
}

リセットボタンの方法は次のようになります。

public void rst(){
    letsdraw = false;
    invalidate();
    Log.v("tag", "this method called");

}

しかし、メソッドを呼び出してもキャンバスに変更はありません。上記のコードに何か間違ったことを書きましたか?

4

2 に答える 2

1

このようにロジックを作成します。条件を付けてに線を引きCanvasます。線を引くかどうかを確認してから、線を引きます。

スケルトンコード-

@Override
    protected void onDraw(Canvas canvas)
    {
        if(needToDrawLine)
        {
            //draw the line
        }
        // Other drawing stuff
    }

needToDrawLine次に、変数を更新してを呼び出しますinvalidate()。あなたはあなたの結果を得るでしょう。動作するかどうか教えてください。

アップデート:

onDraw()メソッドは、を呼び出すたびに呼び出しますinvalidate()。したがって、内部のすべてonDraw()が実行されます。方法は、パーツの一部を描画しないようにする必要があるということです。invalidate()ビュー全体を再描画する場合は、たとえば、キャンバスをクリアするためのボタンを呼び出します。

  • canvas.drawColor(Color.BLACK);この線は、ビュー全体を黒色にクリアします。

  • canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); この線はビットマップを(0,0)に描画します。

  • canvas.drawPath(mPath, p);この線はパスを描画しますmPath

  • obaby.draw(canvas);他のオブジェクトはそれ自体を描画します。

ここで、たとえば、ボタンが押されたときに画面をクリアしたいとします。すべてを描画する場合は、変数を初期化するだけです。そして、ボタンクリックで変数を更新します。

public boolean drawEverything = true;

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLACK);
        if(drawEverything)
        {
            canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
            canvas.drawPath(mPath, p);
            obaby.draw(canvas);
        }
    }

    public void buttonClicked( ... )
    {
        drawEverything = false;
    }
于 2012-05-30T08:37:42.830 に答える
-1

これを使っているIamは私の活動で絵の具を怒らせます

            mBitmap.eraseColor(Color.TRANSPARENT);
            mPath.reset();
            mView.invalidate();             
于 2012-05-30T08:59:51.693 に答える