Размер изображения в другом состоянии - PullRequest
0 голосов
/ 01 апреля 2011

у меня есть этот источник в гибкой простой программе, которая переключается между двумя состояниями ... во втором состоянии это компонент show myImage

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" 
               xmlns:components="components.*">

    <fx:Script>
        <![CDATA[
            protected function button1_clickHandler(event:MouseEvent):void
            {
                if (currentState == "state1")
                    currentState = "state2";
                else
                    currentState = "state1";                        
            }
        ]]>
    </fx:Script>

    <s:states>
        <s:State name="state1" />
        <s:State name="state2" />
    </s:states>

    <components:myImage includeIn="state2"/>

    <s:Button label="switch states" click="button1_clickHandler(event)" />
</s:Application>

компонент myImage находится здесь:

<?xml version="1.0" encoding="utf-8"?>
<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/mx" >
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            protected function img_creationCompleteHandler(event:FlexEvent):void
            {
                trace("image width " + img.width);
            }
        ]]>
    </fx:Script>
    <mx:Image id="img" source="obr.jpg" creationComplete="img_creationCompleteHandler(event)"/>
</s:Group>

если тот же код, что и myImage.mxml, помещен в основное приложение, то отследить правильное значение печати ... но теперь, когда я нажимаю кнопку и переключаюсь в состояние2, тогда трассируем ширину печати как 0 ... почему? после какого события загружается изображение в state2, и я могу использовать свойство image.width ??

спасибо за помощь

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Причина, по которой он не имеет ширины, заключается в том, что ваше изображение еще не загружено.Все еще нужно получить изображение с вашего сервера для работы.Есть две вещи, которые вы можете сделать.Вы можете встроить изображение так, чтобы на creationComplete изображение уже было (чтобы встроить, просто сделайте @Embed('image.jpg') для источника), или подождите, пока изображение загрузится, используя событие complete, но тогда это не 100%что ваш контейнер (изображение) изменит размер сразу.Вы можете попробовать сделать callLater для своего следа.Попробуйте выполнить отладку и проверьте свойство contentWidth на изображении, которое может быть лучше использовать, поскольку оно относится к самому изображению, а не к контейнеру.

0 голосов
/ 01 апреля 2011

Попробуйте добавить itemCreationPolicy="immediate" к изображению следующим образом:

<components:myImage includeIn="state2" itemCreationPolicy="immediate" />
...