如何在屏幕分辨率太小时缩放Flex应用程序?

时间:2011-03-18 10:05:03

标签: flex flex4

我正在开发一款专为1280x1024及更高屏幕分辨率设计的Flex应用程序。在极少数情况下使用投影仪(通常最大为1024x768像素)我想缩小应用程序(目前我得到了很多滚动条和剪辑)。

我已经尝试过应用程序的属性scaleXscaleY以及stage.scaleMode。但是,我无法找到一种方法

  • 在应用程序的宽度和高度大于特定值时,无需缩放即可呈现应用程序
  • 当宽度或高度小于特定值时使用缩放

我该如何做到这一点?

4 个答案:

答案 0 :(得分:1)

我会通过在顶级应用程序的“resize”事件中添加一个事件监听器来解决这个问题。这是resize事件的示例方法处理程序(假设处理程序在主Application类中,因此“this”指的是顶级Application):

function onResize(e:Event):void {
  if(this.scaleX > 1){
    //check if we need to readjust to a normal scale of 1
    var effectiveWith:int = this.width*this.scaleX;
    var effectiveHeight:int = this.height*this.scaleY;
    if(effectiveWidth > 1280 || effectiveHeight > 1024){
        this.scaleX = 1;
        this.scaleY = 1;
    }
   }else{
    //the scale is still 1, lets see if we should scale it up
    if(this.width < 1280 || this.height < 1024){
        this.scaleX = (1280-this.width)/1280 + 1;
        this.scaleY = (1024-this.height)/1024 + 1;
    }
  }
}

答案 1 :(得分:1)

我终于找到了缩小应用程序的方法。实际上,孩子们需要扩展应用程序。否则,应用程序的widthheight会缩小。

由于我正在使用状态,我还必须为currentStateChanging事件添加事件处理程序。

private static const MIN_WIDTH:Number = 1250;
private static const MIN_HEIGHT:Number = 800;

protected function application_currentStateChangingHandler():void
{
    callLater(scaleElements);
}

protected function application_resizeHandler():void
{
    scaleElements();
}

protected function scaleElements():void
{
    var newScaleX:Number = 1;
    var newScaleY:Number = 1;

    if (width < MIN_WIDTH)
        newScaleX = width / MIN_WIDTH;

    if (height < MIN_HEIGHT)
        newScaleY = height / MIN_HEIGHT;

    var newScale:Number = Math.min(newScaleX, newScaleY);

    for (var i:int = 0; i < numElements; i++)
    {
        var element:DisplayObject = getElementAt(i) as DisplayObject;

        if (element)
        {
            element.scaleX = newScale;
            element.scaleY = newScale;
        }
    }
}

答案 2 :(得分:1)

为了整个应用程序,而不是所有元素分开,我删除了循环并添加了:

this.scaleX = newScale;
this.scaleY = newScale;

答案 3 :(得分:0)

Alex Harui在2009年提出了一个很好的解决方案。请参阅ScaleMode以自动扩展应用程序。请参阅示例here它是如何工作的。