【问题标题】:Image size in other state其他状态下的图像尺寸
【发布时间】:2011-04-01 12:12:56
【问题描述】:

我在 flex 中有这个源 - 在两种状态之间切换的简单程序..在第二种状态是显示 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 相同的代码放入主应用程序,则跟踪打印正确的值..但是现在当我单击按钮并切换到 state2 时,跟踪打印宽度为 0..为什么?在哪个事件之后加载 state2 中的图像,我可以使用 image.width 属性??

感谢帮助

【问题讨论】:

    标签: apache-flex actionscript-3 mxml flash-builder


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 当我将此属性添加到组件时(如您所写),跟踪仍然打印宽度为 0 :(
      • 尝试使用complete事件而不是creationComplete事件:&lt;mx:Image id="img" source="obr.jpg" complete="img_creationCompleteHandler(event)"/&gt;
      • 害怕,trace 仍然只打印 0 :(
      • 当我添加到组件 myImage 任何按钮并在此按钮单击事件后打印相同的轨迹,所以打印正确的宽度...但我需要自动执行..
      • 不要强制创建图像。在需要之前强制创建对象的错误标准。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      相关资源
      最近更新 更多