在Android中旋转画布时图像被剪裁?

时间:2013-04-01 06:49:24

标签: android android-layout bitmap android-canvas android-imageview

我正在开发一个应用程序,其中我使用以下代码旋转图像。

Bitmap bmpOriginal = BitmapFactory.decodeResource(this.getResources(), R.drawable.image2); 
Bitmap bmResult = Bitmap.createBitmap(bmpOriginal.getWidth(), bmpOriginal.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas tempCanvas = new Canvas(bmResult); 
    tempCanvas.rotate(-10, bmpOriginal.getWidth()/2, bmpOriginal.getHeight()/2); 
tempCanvas.drawBitmap(bmpOriginal, 0, 0, null);

mImageView.setImageBitmap(bmResult);

取自Rotating a drawable in Android

但是图像会从类似于this

的边缘剪切掉

我搜索了互联网,但无法解决。我知道我必须增加bmResult的大小。我也尝试过这样做,但仍有一些边被修剪。

如果有任何身体可以给我提供线索或解决问题,那么我的Imageview xml代码

<ImageView
            android:id="@+id/img"
            android:layout_width="45dp"
            android:layout_height="45dp" >

</ImageView>

由于

3 个答案:

答案 0 :(得分:1)

对我有用的一个替代方案是将边距设置为负数:

    params.setMargins(-350, -350, -350, -350);
    final ImageView img1 = new ImageView(this);
    img1.setScaleType(ScaleType.FIT_CENTER);
    linearLayoutBackground.addView(img1, params);

可能不是最好的做法,但它在紧要关头做了诀窍。

答案 1 :(得分:0)

我遇到了同样的问题,这段代码对我有用。试试吧。

Bitmap bmpOriginal = BitmapFactory.decodeResource(this.getResources(), R.drawable.image2); 
        Matrix mat = new Matrix();
        mat.postRotate(-10);
        Bitmap bMapRotate = Bitmap.createBitmap(bmpOriginal, 0, 0, bmpOriginal.getWidth(), bmpOriginal.getHeight(), mat, true);
        mImageView.setImageBitmap(bMapRotate);

答案 2 :(得分:0)

感谢@Alan的回答 我有一个解决方案,我只是在画布上旋转(10,10)x,y后绘制图像。

`tempCanvas.drawBitmap(bmpOriginal, 10, 10, null);`