1

垂直方向に反転またはミラーリングする必要があるビューがあります。hereで説明されているように、単一のビットマップを -1 でスケーリングし、オフセットに変換することでミラーリングすることについては多くの情報がありますが、ビューのすべてのコンテンツを描画する方法に関する情報はないようです-具体的には、それはすべてサブビューです-逆さまです。

このコンテナーには複数のサブビュー (テキスト、画像) があり、それらすべてにカスタム描画コードを実行して描画させるのではなく、それらを単一のビューに追加して、そのビューを上下逆さま/横向きに描画できる方法を望んでいました。それらを逆さまにして、コンテナにそれらすべてを適切に再配置させます。何か案は?

4

2 に答える 2

2

からを作成しCanvasBitmapルート ビューのView.draw(Canvas)メソッドを呼び出すだけです。これにより、ビュー階層のスナップショットがBitmap. 次に、前述の変換を適用してイメージをミラーリングします。

于 2012-09-13T01:45:24.500 に答える
1

ビューをビットマップに転送し、以下の方法を使用して反転します。

private static Bitmap getBitmapFromView(View view,int width,int height) {
    int widthSpec = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
    int heightSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);
    view.measure(widthSpec, heightSpec);
    view.layout(0, 0, width, height);
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    view.draw(canvas);

    return bitmap;
}


private static Bitmap flipBitmap(Bitmap src)
{
    Matrix matrix = new Matrix();
    matrix.preScale(-1, 1);
    Bitmap dst = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, false);
    dst.setDensity(DisplayMetrics.DENSITY_DEFAULT);
    return dst;
}
于 2012-09-13T02:44:06.917 に答える