旋转后从侧面切割ImageView

时间:2013-02-26 14:09:01

标签: android canvas imageview image-rotation

我有一个自定义的ImageView。我想以某种角度旋转我的imageview。这是它的onDraw()方法:

canvas.save();
canvas.rotate(currentAngle,getWidth()/2,getHeight()/2);
super.onDraw(canvas);

图像在旋转,但问题是旋转后,图像从侧面切割。如何避免切割?

示例屏幕截图: enter image description here

2 个答案:

答案 0 :(得分:0)

尝试以下代码:

   public class bitmaptest extends Activity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        LinearLayout linLayout = new LinearLayout(this);

        // load the origial BitMap (500 x 500 px)
        Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),
               R.drawable.android);

        int width = bitmapOrg.width();
        int height = bitmapOrg.height();
        int newWidth = 200;
        int newHeight = 200;

        // calculate the scale - in this case = 0.4f
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;

        // createa matrix for the manipulation
        Matrix matrix = new Matrix();
        // resize the bit map
        matrix.postScale(scaleWidth, scaleHeight);
        // rotate the Bitmap
        matrix.postRotate(45);

        // recreate the new Bitmap
        Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,
                          width, height, matrix, true);

        // make a Drawable from Bitmap to allow to set the BitMap
        // to the ImageView, ImageButton or what ever
        BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);

        ImageView imageView = new ImageView(this);

        // set the Drawable on the ImageView
        imageView.setImageDrawable(bmd);

        // center the Image
        imageView.setScaleType(ScaleType.CENTER);

        // add ImageView to the Layout
        linLayout.addView(imageView,
                new LinearLayout.LayoutParams(
                      LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT
                )
        );

        // set LinearLayout as ContentView
        setContentView(linLayout);
    }
    }

答案 1 :(得分:0)

曾经有过类似的问题。我决定这个问题  办法。我缩放图像,使其看起来像


  

| _ __ |   | | | |   | | _ | |   | _ __ _ |

左右添加半宽图像。顶部和底部增加了一半的高度。新空间填充一些颜色,或者alapha canal等于+ 0.当您旋转图像时,需要剪切多余的颜色。我没有在Android上做到这一点,但我希望这可以帮助你。