0

キャンバスに描画された画像を反転するにはどうすればよいですか?

私は次のものを持っています:

        canvas.save();
        canvas.drawBitmap(image.current(), null, currentBounds(), Paints.BLANK);
        canvas.restore();

現在の画像をx軸上でcurrentBounds()に反転させて描画するにはどうすればよいですか?

Matrixの使用法を示すいくつかの回答をすでに見つけましたが、もっと簡単な方法があるかどうか知りたくありませんか?いくつかのフラグがオンになっているそのようなペイント。

編集:

以下は、マトリックス変換を使った私の試みです。

    Rect currentBounds = currentBounds();


    currentBounds.offset((int)offset.x(), (int)offset.y());

    float scale = image.current().getWidth() / currentBounds.width();

    Matrix matrix = new Matrix();
    matrix.setScale(- scale - 1, scale + 1);
    matrix.postTranslate(currentBounds.left, currentBounds.top);

    canvas.drawBitmap(image.current(), matrix, Paints.BLANK);
    canvas.drawRect(currentBounds, Paints.STROKE_BLUE);

この抽選の結果は次のとおりです。

https://dl.dropbox.com/u/28683814/game.png

ご覧のとおり、スプライトは0,0から左に描画されており、currentBounds()が完全に完了していません。何が間違っているのでしょうか?

4

3 に答える 3

0

使用する

canvas.scale(-1,0,width/2,height/2);

ここで私自身の答えで述べたように。

ただし、マトリックスを理解するには約1分かかり、より優れたAndroidプログラマーになることを指摘しておきます。

于 2012-08-07T19:43:27.453 に答える
0

これを使って。これはとても簡単だと思います。

        canvas.save();
        canvas.rotate(180, x, y);
        canvas.drawBitmap(bitmap, x, y, null);
        canvas.restore();
于 2012-08-07T19:59:00.983 に答える
0

さて、私はこのように解決しました:

    Rect currentBounds = currentBounds();
    currentBounds.offset((int)offset.x(), (int)offset.y());

    float scale = (float) currentBounds.width() / (float) image.current().getWidth();

    boolean leftMovement = movingLeft();

    Matrix matrix = new Matrix();
    matrix.setScale(leftMovement ? -scale : scale, scale);
    matrix.postTranslate(leftMovement ? currentBounds.right : currentBounds.left, currentBounds.top);

    canvas.drawBitmap(image.current(), matrix, Paints.BLANK);

しかし、この「leftMovement?currentBounds.right:currentBounds.left」は正しく見えません

于 2012-08-07T23:39:46.473 に答える