8

カスタムビューがあり、onDraw()を使用してキャンバスに描画しています。このキャンバスに画像を描いています。

基準として横線をひっくり返すように、画像を逆さまにしたいです。これは、画像を180度または-180度回転させることと同じではありません。

同様に、私はサイドウェイをミラーリングまたはフリップしたいと思います。つまり、ピボットまたはリファレンスとして垂直線を使用します。繰り返しますが、これはcanvas.rotate()が提供するものと同じではありません。

私はそれをどのように行うのか疑問に思っています。マトリックスを使用する必要がありますか、それともキャンバスは「回転」のような方法を提供しますか。

ありがとう。

4

1 に答える 1

27

Canvasで直接行うことはできません。描画する前に、実際にビットマップを(Matrixを使用して)変更する必要があります。幸いなことに、これを行うのは非常に単純なコードです。

public enum Direction { VERTICAL, HORIZONTAL };

/**
    Creates a new bitmap by flipping the specified bitmap
    vertically or horizontally.
    @param src        Bitmap to flip
    @param type       Flip direction (horizontal or vertical)
    @return           New bitmap created by flipping the given one
                      vertically or horizontally as specified by
                      the <code>type</code> parameter or
                      the original bitmap if an unknown type
                      is specified.
**/
public static Bitmap flip(Bitmap src, Direction type) {
    Matrix matrix = new Matrix();

    if(type == Direction.VERTICAL) {
        matrix.preScale(1.0f, -1.0f);
    }
    else if(type == Direction.HORIZONTAL) {
        matrix.preScale(-1.0f, 1.0f);
    } else {
        return src;
    }

    return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
}
于 2012-07-23T09:27:01.447 に答える