Android:围绕屏幕中心旋转canvas

我试图围绕屏幕中心旋转canvas,以获得(0,0)坐标在右下angular。

这是我如何做到的:

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可以解决问题:

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

但是,为什么以前的版本不能使用旧的API呢?

Solutions Collecting From Web of "Android:围绕屏幕中心旋转canvas"

Canvas和“ Display并不总是必须具有相同的大小。 不build议使用Display.getSize()而是build议使用Display.getSize() 。 从文档 :

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

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

所以,在canvasmatrix转换的情况下,总是使用canvas作为参考,而不是显示或窗口,因为canvas会给出准确的值。 所以要围绕中心旋转canvas,你需要canvas的中心。

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