Масштабирование и изменение размера гибкого компонента - PullRequest
0 голосов
/ 30 марта 2011

У меня есть пользовательский компонент Flex, унаследованный от UIComponent (скомпилирован, нет доступа к исходному коду).Он имеет фиксированные пропорции ширины и высоты и является масштабируемым.Если я устанавливаю его ширину и высоту равными 100%, он пытается соответствовать размеру родительского элемента, но он сохраняет пропорцию ширины к высоте, поэтому, если его пропорция не равна пропорции родителя, при изменении размера родителя может появиться пустое пространство рядом с этим компонентом.enter image description here

Что мне нужно, так это полностью подогнать мой компонент к размеру родителей.Есть ли хороший способ сделать это?Я мог бы прослушать родительское событие resize и поиграть с компонентами scaleX и scaleY, но может быть найдется какой-нибудь лучший способ решить мою проблему (какое-либо свойство?).Спасибо.

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

Отличным способом является использование Greensock's AutoFitArea.Кодирование так же просто, как следующее

var area:AutoFitArea = new AutoFitArea(this, 50, 70, 300, 100);
area.attach(myImage, {scaleMode:ScaleMode.PROPORTIONAL_OUTSIDE, crop:true});

, которое будет ограничивать то, что находится внутри, с заданными размерами (300,100) оттуда и далее, вы можете просто изменить ширину area, и это будет иметь значениевсе для вас.

надеюсь, что это поможет

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

Лично я хотел бы, чтобы компонент в родительском элементе был установлен на ширину / высоту 100%, затем в самом компоненте переопределил функцию updateDisplayList (которая возвращает немасштабированный ширину / высоту) и затем изменил размер дочерних элементов, которые вы 'пытаемся отобразить в зависимости от ширины / высоты этого контейнера.Примерно так:

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
    if(this._child!= null)
    {
        if(unscaledWidth > unscaledHeight)
        {
            this._child.height = unscaledHeight;
            this._child.scaleX = this._video.scaleY;
        }else{
            this._child.width = unscaledWidth;
            this._child.scaleY = this._video.scaleX;
        }
    }
}

Должен это сделать.

0 голосов
/ 30 марта 2011

Должен ли компонент сохранять свою пропорцию? Если нет, вы можете просто, как вы сказали, прослушать событие resize родительского элемента и установить ширину и высоту для значений компонентов.

Если компонент должен сохранять свою пропорцию, вы можете изменить размер фона вашего компонента так, чтобы он соответствовал размеру родительских элементов, и изменить размер содержимого вашего компонента пропорционально.

...