Actionscript 3 使用loader类加载图像并在arrayCollection中发送图像
我面临着一个我无法解决的特殊问题。 我正在使用带有机器人腿框架的ActionScript3。我必须在命令中发出一系列URL请求。每个URL提供一个图像。我将这些图像推送到ArrayCollection中,然后使用此ArrayCollection作为负载发送事件。此ArrayCollection被发送到使用itemRenderer显示图像的视图。我已检查图像是否正在加载到ArrayCollection,但图像未显示在视图中 这是我在命令里写的Actionscript 3 使用loader类加载图像并在arrayCollection中发送图像,actionscript-3,image-loading,urlrequest,robotlegs,Actionscript 3,Image Loading,Urlrequest,Robotlegs,我面临着一个我无法解决的特殊问题。 我正在使用带有机器人腿框架的ActionScript3。我必须在命令中发出一系列URL请求。每个URL提供一个图像。我将这些图像推送到ArrayCollection中,然后使用此ArrayCollection作为负载发送事件。此ArrayCollection被发送到使用itemRenderer显示图像的视图。我已检查图像是否正在加载到ArrayCollection,但图像未显示在视图中 这是我在命令里写的 var arrayCollect:ArrayColle
var arrayCollect:ArrayCollection = new ArrayCollection();
var my_loader:Loader = new Loader();
my_loader.load( new URLRequest( "http://www.joomlaworks.net/images/demos/galleries/abstract/7.jpg" ) );
arrayCollect.addItem(my_loader as Object );
my_loader.load( new URLRequest( "http://www.joomlaworks.net/images/demos/galleries/abstract/8.jpg" ) );
arrayCollect.addItem(my_loader as Object );
return arrayCollect;
然后,arrayCollect将在事件中作为有效负载进行调度
dispatch( new XYZEvent ( XYZEvent.LOAD_COMPLETE, arrayCollect ) );
在视图中,我使用了itemRenderer
<s:List id="pqr"
dataProvider="{data}">
....
</s:List>
....
没有显示图像。我认为问题在于arrayCollection中的数据是“loader”类型的对象。因此,我尝试将其键入为BitmapImage,但没有解决问题
请帮助我解决此问题。您的问题是没有定义可以显示数据的项目渲染器。有关创建custum项目渲染器的信息,请参见 下一步:在ArrayCollection中,您没有创建新的加载程序。意味着ArrayCollection项1指向与项2相同的LaOrder 我添加了一个有两个列表的示例,一个没有渲染器,一个有custum渲染器。我没有使用加载程序,但是当然你可以创建一个渲染器,它可以在显示中添加一个laoder,而不是使用Flex图像组件 主要应用程序:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication 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:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
private var _dataProviderList : ArrayCollection = new ArrayCollection(
[
"http://www.joomlaworks.net/images/demos/galleries/abstract/7.jpg",
"http://www.joomlaworks.net/images/demos/galleries/abstract/8.jpg"
]
);
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:List dataProvider="{_dataProviderList}">
</s:List>
<s:List itemRenderer="ImageItemRenderer" dataProvider="{_dataProviderList}">
</s:List>
</s:WindowedApplication>
渲染器
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
autoDrawBackground="true">
<mx:Image
source="{data}"
width="50" height="50"/>
</s:ItemRenderer>
如果您确实希望在ArrayCollection中使用laoder作为对象,则可以将渲染器编写为:
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
autoDrawBackground="true">
<fx:Script>
<![CDATA[
[Bindable]
private var _loader : Loader;
private function dataLoaded (evt : Event) : void
{
_loader = (data as Loader)
}
override public function set data(value:Object):void
{
super.data = value;
if (data is Loader) {
// render items may be reuses (http://stackoverflow.com/questions/7328989/itemrenderer-switching-urlloader-images)
(data as Loader).contentLoaderInfo.removeEventListener(Event.COMPLETE, dataLoaded);
// data allready loaded
if ((data as Loader).content) {
_loader = (data as Loader)
}
else {
// wait till data is loaded
(data as Loader).contentLoaderInfo.addEventListener(Event.COMPLETE,dataLoaded);
}
}
}
]]>
</fx:Script>
<mx:Image
source="{_loader}"
width="50" height="50"/>
</s:ItemRenderer>
这不是问题所在。我已经在其中定义了一个项目渲染器,我需要在不同的程序中发出URL请求。在这个程序中,我获取图像并制作一个ArrayCollection。我将此数组集合作为参数传递给项目渲染器。但是数组集合具有类型为loader的对象。我为数组集合编写了一个跟踪命令,我得到了这个,arrayCollect====[object Loader],[object Loader],[object Loader]是否正确?阅读您的问题,项目渲染器就是问题所在。如果您已经编写了custum呈现程序,则应该在问题中包含他的呈现程序,以便给出正确答案。我提供了一个示例,其中您可以在ArrayCollection中使用加载程序作为项。我使用您的示例进行了一些更改,解决了问题。谢谢,最好做一个装载机服务