2012-01-23 61 views
2

我有一个imageView,我基本上试图制作一个温度计风格的测量仪。我在下面添加了一张用于测试的图片,我基本上正在尝试旋转图片。第一张照片的图像标准布局。尝试旋转图像后,宽度仍会填满屏幕,但会缩小图像以为角落腾出空间,使实际图像显得更小。我希望图像保持完全相同的大小,但是会根据传递给它的矩阵进行旋转。Android: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或我需要写一个自定义视图,以允许东西离开屏幕?顺便说一句,我实际上并不会画出整个圈子,这只是一个例子来解决我的问题。

回答

3

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

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

newWidth = width/cos(alpha) 

则:

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

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

+0

这就是我最初的想法。唯一的问题是,当我传递给createBitmap()的大小比容器大时,它强制关闭。 – SemperGumbee

+0

然后裁剪后创建... – Rotemmiz

+0

它挂在createBitmap()或当它试图把它放在一个imageView? – Rotemmiz

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);