其他状态下的图像大小

时间:2011-04-01 12:12:56

标签: flex actionscript-3 mxml flash-builder

我在flex-easy程序中有这个源,它在两个状态之间切换。第二个状态是show myImage component

<?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相同的代码放到主应用程序然后跟踪打印正确的值..但是现在当我点击按钮并切换到state2然后跟踪打印宽度为0 ..为什么?之后的事件是在state2加载的图像,我可以使用image.width属性??

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

它没有宽度的原因是因为您的图像尚未加载。它仍然需要从您的服务器获取图像才能工作。你可以做两件事。您可以嵌入图片,以便在creationComplete图片已经存在(要嵌入,只为源@Embed('image.jpg')执行),或等待使用complete事件加载图片,但是,你的容器(Image)会马上调整大小并不是100%。您可以尝试为跟踪执行callLater。尝试调试并检查图像上的contentWidth属性,这可能是一个更好的属性,因为它与图像本身有关,而不是容器。

答案 1 :(得分:0)

尝试按以下方式将itemCreationPolicy="immediate"添加到图像中:

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