我有一个imageView,我基本上试图制作一个温度计样式。我在下面添加了一张图片进行测试,我基本上试图旋转图像。第一张图片的标准布局为图像。尝试旋转图像后,宽度仍然会填满屏幕,但它会缩小图像以为角落腾出空间,使实际图像显得更小。我希望图像保持完全相同的大小,但根据传递给它的矩阵进行旋转。
以下是我用于轮换的代码:
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还是我需要编写自定义视图以允许屏幕外的内容?顺便说一句,我实际上并没有画出这整个圈子,这只是一个让我的问题得到解决的例子。
答案 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);