无法使用AS3中的状态从外部XML加载图像

时间:2013-04-24 00:33:26

标签: xml image actionscript-3 states

当我在整个应用程序中进入不同状态时,我正在使用状态来显示不同类型的媒体。我正在处理图像状态,我可以从我的XML中获取数据,以显示在我已经布局的数据网格中,并显示我单击时查看的图像的名称,但图像不会显示。这是我现在的代码:

    <fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
    <fx:XML id="images" source="img_data/images.xml" />
    <s:XMLListCollection id="imageCollection" source="{images.IMAGE}" />
</fx:Declarations>
<s:HGroup>
    <s:DataGrid id="imageGrid" dataProvider="{imageCollection}" click="onClick()" />

    <s:VGroup height="55">
        <s:Label text="Now viewing: {imageGrid.selectedItem.@name}" />
        <s:Label id="txtPosition" width="91"/>
    </s:VGroup>

</s:HGroup>
<fx:Script>
    <![CDATA[
        import mx.controls.Image;

        public var newImage:Image;
        public var myXML:XML;
        [Bindable]public var myURLLoader:URLLoader = new URLLoader;



        public function onClick():void{
            newImage = new Image();
            newImage.load(new URLRequest(imageGrid.selectedItem.file.toString()));
            newImage.addEventListener(Event.COMPLETE, processXML);

            newImage.source = images.IMAGE.@src;
        }

        public function processXML(e:Event):void{
            myXML = new XML(e.target.data);
                //newImage = new Image();

                newImage.height = 200;
                newImage.width = 400;
                imgGroup.addElement(newImage);

        }


    ]]>
</fx:Script>

我的XML文件来自:

<?xml version="1.0" encoding="utf-8"?>
<GALLERY COLUMNS="5" XPOSITION="30" YPOSITION="30" WIDTH="100" HEIGHT="100">
<IMAGE name="Cabin in the Woods" >
<file>img_data/cabin.jpg </file>
</IMAGE>
<IMAGE name="Batman" src="img_data/batman.jpg" >
<file>img_data/batman.jpg</file>
</IMAGE>
<IMAGE name="Christmas Vacation">
<file>img_data/christmasVacation.jpg</file>
</IMAGE>
<IMAGE name="Inception">
<file>img_data/inception.jpg</file>
</IMAGE>
</GALLERY>

1 个答案:

答案 0 :(得分:0)

首先,您应该使用URLLoader加载XML,而不是图像。

    public function onClick():void{
        myURLLoader.load(new URLRequest(imageGrid.selectedItem.file.toString()));
        myURLLoader.addEventListener(Event.COMPLETE, processXML);
    }

在从XML实际读取之前,不应设置图像的源。

    public function processXML(e:Event):void{
        myXML = new XML(e.target.data);
        newImage = new Image();
        newImage.source = myXML.IMAGE[0].file.text();
        imgGroup.addElement(newImage);
    }

我随意添加[0],因为我不知道你想从XML加载哪个IMAGE。