変数を宣言してバインディング ソースとして使用する代わりに、2 つのコレクションを宣言します。次に、onCreationComplete が loadNext() を呼び出して、オブジェクトを 2 番目の配列からシフトし、最初の配列にプッシュします。アイテムがレンダリングされたら (itemRenderer によってディスパッチされてキャッチされたカスタム イベント)、ソース配列が空になり、バインドされた dataProvider にすべての画像が含まれるまで、再度 loadNext() を呼び出します。
これが意味をなさない場合は、コードで記述できます。;)
<?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/halo" minWidth="1024" minHeight="768" creationComplete="init()">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var _source : ArrayCollection = new ArrayCollection([
{"location" : "path/to/image1.jpg"},
{"location" : "path/to/image2.jpg"},
{"location" : "path/to/image3.jpg"}
]);
[Bindable] private var dataProvider:ArrayCollection;
protected function init():void
{
this.lstImages.addEventListener( "imageLoaded", handleImageLoaded);
loadImage()
}
protected function loadImage():void
{
if(this._source.length<=0)
return;
var image:Object = this._source.getItemAt(0);
dataProvider.addItem(image);
this._source.removeItemAt(0);
}
protected function handleImageLoaded(event:Event):void
{
loadImage()
}
]]>
</fx:Script>
<s:List
id="lstImages"
width="100%"
dataProvider="{_dpImageList}"
itemRenderer="path.to.render.ImageRenderer"
skinClass="path.to.skins.ListSkin"
>
<s:layout>
<s:HorizontalLayout gap="2" />
</s:layout>
</s:List>
</s:Application>
アイテム レンダラーのイメージの完全なハンドルがディスパッチされます。
protected function handleImageLoaded(event:Event):void
{
owner.dispatch(new Event("imageLoaded"));
}
そして、それはあなたの画像をきれいな順序でロードするはずです.