如何根据手机方向(横向,纵向)绘制画布?

Posted

技术标签:

【中文标题】如何根据手机方向(横向,纵向)绘制画布?【英文标题】:How to draw canvas in respect of phone orientation (landscape , portrait)? 【发布时间】:2010-10-11 15:56:48 【问题描述】:

纵向模式没有问题,但是当我在横向模式下尝试我的应用程序时,它看起来不应该如何。解决这个问题的一般方法是什么。我的第一个想法是替换 X 和 Y 位置。如果我是在正确的轨道上我应该怎么做?我是否应该在 onDraw() 函数的开头使用 if 语句并编写两次完全相同的代码(一个用于 x,y,另一个用于 y,x)?

【问题讨论】:

按照文档的建议,使用您的景观布局创建第二个文件夹,或者您是否有理由不这样做? 因为我使用的是画布和我自己的视图,所以我没有使用任何布局 xml 文件。 【参考方案1】:

听起来您正在为绘图调用指定绝对宽度和高度。例如,如果您在早期保存了 myWidth = 480 和 myHeight = 800,并以这种方式完成所有绘图,那么当设备旋转时,这些宽度和高度将不再适用。

我认为您的解决方案是听取尺寸更改的回调并相应地重置您对宽度和高度的想法。如果您是直接在视图中绘制,则需要覆盖 View.onSizeChanged()。

【讨论】:

您好,感谢您的回答。我没有使用绝对宽度和高度,但我正在绘制位图和画布,正如我之前所说,由于 X,Y,我的位图的一半没有显示旋转问题。 那么当 View 的大小发生变化时,您需要以不同的方式绘制该位图。在调用 onSizeChanged 时以更宽的宽度和更薄的高度重新创建它。【参考方案2】:

您应该不需要在绘图中交换 X 和 Y 坐标。默认情况下,当应用旋转时,坐标系也会旋转。

【讨论】:

不幸的是,我的应用程序需要可能我做错了什么。当手机旋转(到横向模式)时,画布被重绘,但它仍然像纵向模式一样绘制,一半的画布不会垂直显示在屏幕上,一半屏幕水平为空。 您是否尝试自己处理方向变化?

以上是关于如何根据手机方向(横向,纵向)绘制画布?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据设备方向制作横向或纵向照片[重复]

iPad:如何根据方向(横向/纵向)显示不同的屏幕

在移动网络浏览器中使用 input[type='file'] 捕获照片后,如何在画布中以正确的方向绘制照片?

iPad - 根据设备方向(纵向或横向)更改图像

使用canvas画布利用js通过鼠标实现矩形的绘制(任意方向的绘制图形)

如何使用 clearRect 不在画布上绘制移动对象