Как масштабировать приложение Flex, если разрешение экрана слишком мало? - PullRequest
0 голосов
/ 18 марта 2011

Я занимаюсь разработкой приложения Flex, разработанного для разрешения экрана 1280x1024 и более. В редком случае, когда используется проектор (который обычно имеет максимум 1024x768 пикселей), я хотел бы уменьшить масштаб приложения (в настоящее время у меня много полос прокрутки и отсечения).

Я уже экспериментировал со свойствами приложения scaleX и scaleY, а также stage.scaleMode. Тем не менее, я не мог придумать способ

  • отображать приложение без масштабирования, когда ширина и высота приложения превышают определенные значения
  • использовать масштабирование, когда ширина или высота меньше определенных значений

Как мне это сделать?

Ответы [ 4 ]

1 голос
/ 21 марта 2011

Я наконец-то нашел способ уменьшить приложение.На самом деле, приложения дети должны масштабировать.В противном случае width и height приложения сжимаются.

Поскольку я использую состояния, мне пришлось добавить обработчик события и для события 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;
        }
    }
}
1 голос
/ 20 июля 2011

Чтобы масштабировать приложение целиком, а не все элементы по отдельности, я удалил цикл и добавил вместо него:

this.scaleX = newScale;
this.scaleY = newScale;
1 голос
/ 18 марта 2011

Я бы решил эту проблему, добавив прослушиватель событий к событию «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;
    }
  }
}
0 голосов
/ 10 февраля 2012

Прекрасное решение было представлено еще в 2009 году Алексом Харуи. См. ScaleMode для автоматического масштабирования приложения. Смотрите пример здесь как это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...