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

9

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

我是这样做的:

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

它在API级别为17的AVD上正确地旋转,一切都很完美。但是在API级别为8的AVD上,(0,0)坐标出现在错误的位置。 在旋转之前,图片也适应该设备的整个屏幕,但现在却变成了这样。问题的原因是什么?
*编辑!
通过围绕画布的中心点旋转画布,问题已得到解决。
canvas.rotate(180,canvas.getWidth()/2,canvas.getHeight()/2);

但是,为什么旧版本不能与较老的API一起使用呢?
1个回答

0

Canvas和Display不一定需要有相同的大小。建议使用Display.getSize()而非Display.getWidth(),因为后者已被弃用。从documentation中可以了解到:

获取显示器的像素大小。

请注意,此值不应用于计算布局,因为设备通常会在显示屏边缘(例如状态栏)添加屏幕装饰,这会减少从此处返回的尺寸中可用的应用空间。布局应该使用窗口大小。

因此,在进行canvas矩阵变换时,应始终以canvas作为参考,而不是Display或Window,因为canvas可以提供准确的值。所以,要使canvas围绕中心旋转,您需要使用canvas的中心点。

canvas的中心点是(canvas.getWidth()/2, canvas.getHeight()/2)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接