Android:ImageView旋转比例

时间:2012-01-23 18:26:37

标签: android bitmap matrix android-imageview

我有一个imageView,我基本上试图制作一个温度计样式。我在下面添加了一张图片进行测试,我基本上试图旋转图像。第一张图片的标准布局为图像。尝试旋转图像后,宽度仍然会填满屏幕,但它会缩小图像以为角落腾出空间,使实际图像显得更小。我希望图像保持完全相同的大小,但根据传递给它的矩阵进行旋转。

Normal Image

Image rotated incorrectly, for me anyways

以下是我用于轮换的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        

    circle = (ImageView) findViewById(R.id.imageView1);
    Bitmap myImg = BitmapFactory.decodeResource(getResources(), R.drawable.rotated);

    Matrix matrix = new Matrix();
    matrix.postRotate(45);

    Bitmap rot = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), myImg.getHeight(),
            matrix, true);

    circle.setImageBitmap(rot);        
}

所以,我基本上需要红色/绿色圆圈边缘才能到达屏幕边缘。这是可以使用imageView还是我需要编写自定义视图以允许屏幕外的内容?顺便说一句,我实际上并没有画出这整个圈子,这只是一个让我的问题得到解决的例子。

2 个答案:

答案 0 :(得分:3)

您必须计算实际的新宽度和高度。 尝试使用一些三角法

newHeight = height/sin(alpha),其中alpha是你的旋转角度......

newWidth = width/cos(alpha)

然后:

Bitmap rot = Bitmap.createBitmap(myImg, 0, 0, newWidth, newHeight ,
            matrix, true);

不确定计算,我没有检查,但我认为是正确的,无论如何,这是一个很好的提示;)

答案 1 :(得分:2)

不确定它是否是最佳的但是可行:只需将位图旋转到初始尺寸。

circle = (ImageView) findViewById(R.id.imageView1);
Bitmap myImg = BitmapFactory.decodeResource(getResources(), R.drawable.rotated);

Matrix matrix = new Matrix();
matrix.postRotate(45);

Bitmap rot = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), myImg.getHeight(), matrix, true);

int off = (rot.getWidth() - myImg.getWidth()) / 2;
Bitmap result = Bitmap.createBitmap(rot, off, off, myImg.getWidth(), myImg.getHeight());

circle.setImageBitmap(result);