1

コンパス活動を準備中です。風のバラ .png があり、アクティビティの開始時に拡大縮小し、方向が変更された後に回転させたいと考えています。

問題は、イメージをスケーリングすると (onCreate のみ)、最初に (そして最初にのみ) 回転メソッドを使用した後、ビューのサイズがもう一度変更され、その理由がわかりません。

回転とスケーリングの方法を投稿させてください。ローズは私のImageViewインスタンスです(ImageViewローズ)

ご覧いただき、アドバイスを投稿してください。ImageView をスケーリングする別の方法を試す必要がありますか?

助けてくれてありがとう!

回転する (正常に動作しているように見えます)

public void rotateRose(float angle){

            angle = 360 - angle;
            Matrix matrix=new Matrix();
            rose.setScaleType(ScaleType.MATRIX);
            pivX = rose.getDrawable().getBounds().width()/2;
            pivY = rose.getDrawable().getBounds().height()/2;
            matrix.preRotate((float) angle, pivX, pivY);
            rose.setImageMatrix(matrix);
}

スケール (見つかったソース リンク)

private void scaleImage(ImageView view, int boundBoxInDp)
    {
        // Get the ImageView and its bitmap
        Drawable drawing = view.getDrawable();
        Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();

        // Get current dimensions
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();

        // Determine how much to scale: the dimension requiring less scaling is
        // closer to the its side. This way the image always stays inside your
        // bounding box AND either x/y axis touches it.
        float xScale = ((float) boundBoxInDp) / width;
        float yScale = ((float) boundBoxInDp) / height;
        float scale = (xScale <= yScale) ? xScale : yScale;

        // Create a matrix for the scaling and add the scaling data
        Matrix matrix = new Matrix();
        matrix.postScale(scale, scale);

        // Create a new bitmap and convert it to a format understood by the ImageView
        Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
        BitmapDrawable result = new BitmapDrawable(scaledBitmap);
        width = scaledBitmap.getWidth();
        height = scaledBitmap.getHeight();

        // Apply the scaled bitmap
        view.setImageDrawable(result);

        // Now change ImageView's dimensions to match the scaled image
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();
        params.width = width;
        params.height = height;
        view.setLayoutParams(params);

        //pivX = width/2;
       // pivY = height/2;
    }
4

1 に答える 1

1

わかりました!

交換

view.setImageDrawable(result);

Scale メソッドで

view.setImageBitmap(scaledBitmap);

画像ビューのスケーリングおよび回転方法を探している場合: 上記のこれらは正常に動作します (この小さな変更で)

于 2012-11-11T23:41:26.267 に答える