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

IAM*_*IAM 8 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);
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

是什么导致了这个问题?

*编辑!

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

canvas.rotate(180,canvas.getWidth()/2,canvas.getHeight()/2);
Run Code Online (Sandbox Code Playgroud)

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

Hen*_*nry 0

Canvas和并不总是需要Display具有相同的大小。Display.getWidth()已弃用,建议使用Display.getSize()。从文档中:

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

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

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

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