rhtx был на правильном пути, но нет простого способа центрировать контроль изображения с его решением. После некоторого тестирования я придумал следующее, чтобы решить эту проблему. Надеюсь, это сэкономит вам время.
Вот код для пользовательского компонента, основанного на группе, содержащей элемент управления изображением.
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
creationComplete="group1_creationCompleteHandler(event)"
>
<fx:Script>
<![CDATA[
public function assignImage(imgUrl:String):void
{
imgA.source = imgUrl;
imgA.visible = true;
}
protected function group1_creationCompleteHandler(event:FlexEvent):void
{
this.addEventListener(ResizeEvent.RESIZE, SinglePageViewer_resizeHandler);
}
protected function group1_resizeHandler(event:ResizeEvent):void
{
updateImageDimensionsAndPosition(this.width, this.height);
}
private function updateImageDimensionsAndPosition(w:Number, h:Number):void
{
var aspect:Number = imgA.width / imgA.height;
var containerAspect:Number = w / h;
if ( isNaN(aspect) == false )
{
if (aspect <= containerAspect)
{
imgA.height = h;
imgA.width = aspect * imgA.height;
}
else
{
imgA.width = w;
imgA.height = imgA.width / aspect;
}
// If you want to horizontally center the image, uncomment the following
/*
var oldX:Number = imgA.x;
var newX:Number = w/2 - imgA.width/2;
if ( (oldX != newX) && (newX > 0) )
{
imgA.x = newX;
}
*/
}
}
]]>
</fx:Script>
<s:Image id="imgA" visible="false" top="0" maintainAspectRatio="true" />
</s:Group>
Единственная другая часть находится в основном приложении, вы должны указать maxWidth и maxHeight для пользовательского компонента.
<components.myCustomImageGroup id="cig" maxWidth="500" maxHeight="400" />