Android:围绕屏幕中心旋转画布

时间:2013-08-03 01:31:41

标签: java android rotation android-canvas

我正在尝试围绕屏幕中心旋转画布,以获得右下角的(0,0)坐标。

我就是这样做的:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();
canvas.rotate(180, width/2, height/2);

它确实正确旋转,并且ARE的所有内容都是完美的,API级别为17.但是在API等级为8的AVD上,(0,0)坐标出现在错误的位置。在旋转之前,图片也适合整个屏幕在这个设备,但现在它看起来像这样:

enter image description here

是什么导致了这个问题?

*编辑!

通过围绕自己的中间点旋转画布来解决问题:

canvas.rotate(180,canvas.getWidth()/2,canvas.getHeight()/2);

但是,为什么以前的版本不适用于较旧的API?

1 个答案:

答案 0 :(得分:0)

CanvasDisplay并不总是必须具有相同的尺寸。不推荐使用Display.getWidth(),建议使用Display.getSize()代替canvas。来自documentation

  

获取显示的大小(以像素为单位)。

     

请注意,此值不应用于计算布局,因为a   设备通常会有屏幕装饰(如状态栏)   沿着显示器的边缘,减少了应用程序的数量   从这里返回的尺寸可用的空间。布局应该改为   使用窗口大小。

因此,在canvas矩阵变换的情况下,始终使用canvas作为参考,而不是显示或窗口,因为画布将给出准确的值。因此,要围绕中心旋转画布,您需要(canvas.getWidth()/2 , canvas.getHeight()/2)的中心。

画布的中心是round(x/tol)*tol