在我的Flex应用程序中,我调用一个Web服务,该服务返回几十个“项目”,其中每个项目都有一个关联的图像URL。我基于这些数据创建了一个模型,并将图像组件的source属性绑定到url字符串。
我希望能够更好地控制这些图像的加载,尤其是它们的加载顺序。我还想预先加载不一定与组件绑定的图像。基本上我想加载用户首先看到的图像,然后在后面加载他们可能会看到的图像。
Flex中是否有一种机制可以用来在后台加载图像?
答案 0 :(得分:2)
将文件放入队列并一个接一个地加载它们。 Flex(框架)不会为您执行此操作,但您可以相对轻松地在AS3中编写自己的。
我个人使用自己的解决方案,但也有一堆可用的现有解决方案;最常见的可能是Bulk Loader。
答案 1 :(得分:0)
据我所知,没有一个开箱即用的机制,没有,但你总是可以通过URLLoader以某种方式加载Timer上的图像来检索和存储每个的字节。直到你需要它们为止。根据模型的设置方式(例如,您可以将每个图像存储为ArrayCollection中的ByteArray),它应该是一个相对简单的事情。这有帮助吗?
答案 2 :(得分:0)
我创建了一种机制,用于从XML文件中读取URL列表,并在后台或按需加载它们(以先到者为准)。预加载只是加载图像,并没有任何东西;它取决于浏览器缓存来保存该图像,直到UI执行“加载”并立即返回它。
GalleryImageItem.status更多用于调试而不是其他任何东西。用户界面对预加载器一无所知(并且不必与之协调)。
干杯
private var BackgroundLoaderIndex : int = -1;
private var BackgroundImageLoader : Loader = null;
private var GalleryCanvasIndex : int = -1;
private var BackgroundGalleryLoadTimer : Timer;
[ArrayElementType("GalleryImageItem")]
private var GalleryImageArray : Array = new Array();
private function Initialize(event : Event) : void
{
LoadGalleryImageArray();
BackgroundGalleryLoadTimer = new Timer(4000);
BackgroundGalleryLoadTimer.addEventListener(TimerEvent.TIMER, BackgroundGalleryLoad);
BackgroundGalleryLoadTimer.start();
}
private function LoadGalleryImageArray() : void
{
var Galleries : XMLList = PageTextsXML.elements("Gallery").elements("GalleryImage");
for (var counter : int = 0; counter
package com.santacruzsoftware.lib
{
public class GalleryImageItem extends Object
{
public static const UNLOADED : int = 1;
public static const PRELOADING : int = 2;
public static const PRELOADED : int = 3;
public static const PRELOAD_FAILED : int = 4;
public static const LOADING : int = 5;
public static const LOADED : int = 6;
public static const LOAD_FAILED : int = 7;
private var _resourceName : String;
private var _detailResourceName : String;
private var _caption : String;
private var _status : int;
public function GalleryImageItem(aResourceName : String = "", aCaption : String = "", aDetail : String = "")
{
super();
_resourceName = aResourceName;
_caption = aCaption;
_detailResourceName = aDetail;
_status = UNLOADED;
}
public function get detailResourceName() : String{ return _detailResourceName }
public function set detailResourceName(value : String) : void { _detailResourceName = value }
public function get resourceName() : String{ return _resourceName }
public function set resourceName(value : String) : void { _resourceName = value }
public function get caption() : String{ return _caption }
public function set caption(value : String) : void { _caption = value }
public function get status() : int { return _status }
public function set status(value : int) : void { _status = value }
}
}