【问题标题】:Android: rotate canvas around the center of the screenAndroid:围绕屏幕中心旋转画布
【发布时间】:2013-08-04 09:38:10
【问题描述】:

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

【问题讨论】:

    标签: java android rotation android-canvas


    【解决方案1】:

    CanvasDisplay 的大小并不总是必须相同。 Display.getWidth() 已弃用,建议改用 Display.getSize()。来自documentation

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多