Flex Mobile Sizing&使用DPI更改进行定位

时间:2012-08-03 21:54:31

标签: ios actionscript-3 flex air dpi

好的,我正在为iOS构建一个Flex Mobile项目。它是使用ANE(原生扩展)的原型视频播放器。稍后将在更大的项目中使用视频播放器。

现在,我遇到的问题是调整大小和定位,我认为这个问题是因为我为该项目设置了一个160的applicationDPI。

以下是发生的事情。 ANE本质上是一个美化的StageWebView,它内置了大量的额外功能,并且不提供GUI(使用StageWebView的主要功能)。这个项目位于全局空间,如StageWebView,无论我尝试什么,我都无法正确定位和调整大小。这基本上是对播放器的大小和位置负责的原因

this.height = 50% of stage
this.width = 50% of stage
this.globalPoint:Point = this.localToGlobal(new Point(0,0));

this.viewPort = new Rectangle (this.globalPoint.x,this.globalPoint.y,this.width,this.height - 35); //35 = height of controls
this.videoPlayer = new VideoPlayer(this.stage,this.viewPort); //VideoPlayer(stage:Stage,viewPort:Rectangle)

现在,在我看来,这看起来很完美。它不在显示列表中,但对于最终用户来说,它看起来就像是。它会保持粘合到父类的0,0(当然还有Resize函数的帮助),视频将是适当区域的大小。

我错了。在我的Retina iPad上,它的位置偏远,尺寸更大。在收集了大量数据并进行数学运算之后,我发现了一个4/3的常数,一切似乎都已消失了。 iPad的DPI变化是3/2(160 - > 240),所以我不认为这是问题所在。

我还提出了这个简单的方程来补偿DPI的变化。

newValue = (oldValue / (DeviceManager.applicationDPI / FlexGlobals.topLevelApplication.applicationDPI) ); //DeviceManager.applicationDPI is a static getter that returns either 160, 240, or 320 based on Adobe's predefined ranges

我还没有在iPad 1/2或iPhone上测试过这个,但我担心我的魔法常数实际上只是影响事物的长宽比。

有谁知道定位为什么搞砸了?它不是localToGlobal,因为即使手动输入应该工作的值也会导致灾难。

0 个答案:

没有答案