我正在尝试围绕屏幕中心旋转画布,以获得右下角的(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)坐标出现在错误的位置。在旋转之前,图片也适合整个屏幕在这个设备,但现在它看起来像这样:
是什么导致了这个问题?
*编辑!
通过围绕自己的中间点旋转画布来解决问题:
canvas.rotate(180,canvas.getWidth()/2,canvas.getHeight()/2);
但是,为什么以前的版本不适用于较旧的API?
答案 0 :(得分:0)
Canvas
和Display
并不总是必须具有相同的尺寸。不推荐使用Display.getWidth()
,建议使用Display.getSize()
代替canvas
。来自documentation:
获取显示的大小(以像素为单位)。
请注意,此值不应用于计算布局,因为a 设备通常会有屏幕装饰(如状态栏) 沿着显示器的边缘,减少了应用程序的数量 从这里返回的尺寸可用的空间。布局应该改为 使用窗口大小。
因此,在canvas
矩阵变换的情况下,始终使用canvas
作为参考,而不是显示或窗口,因为画布将给出准确的值。因此,要围绕中心旋转画布,您需要(canvas.getWidth()/2 , canvas.getHeight()/2)
的中心。
画布的中心是round(x/tol)*tol