8

我正在尝试围绕屏幕中心旋转画布,以获取右下角的 (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 一起使用?

4

1 回答 1

0

Canvasthe和 the的大小并不总是必须Display相同。Display.getWidth()已弃用,建议Display.getSize()改用。从文档中:

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

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

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

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

于 2015-11-11T10:35:47.407 回答