Загрузка изображений в фоновом режиме с помощью Flex - PullRequest
2 голосов
/ 06 января 2009

В моем приложении Flex я вызываю веб-сервис, который возвращает несколько десятков «элементов», где каждый элемент имеет связанный URL-адрес изображения. Я создаю модель на основе этих данных и связываю свойство источника компонентов изображения со строкой URL.

Я бы хотел иметь больше контроля над загрузкой этих изображений, особенно в порядке их загрузки. Я также хотел бы предварительно загрузить изображения, которые еще не обязательно связаны с компонентами. По сути, я хотел бы загрузить изображения, которые пользователь сначала увидит, а затем загрузить изображения в фоновом режиме, которые они могут увидеть позже.

Есть ли в Flex механизм, который я могу использовать для загрузки изображений в фоновом режиме?

Ответы [ 3 ]

2 голосов
/ 06 января 2009

Поместите файлы в очередь и загружайте их один за другим. Flex (фреймворк) не сделает этого за вас, но вы можете относительно легко написать свой собственный в AS3.

Лично я использую свое собственное решение для этого, но для этого есть множество доступных существующих решений; наиболее распространенным, вероятно, является Bulk Loader .

0 голосов
/ 07 января 2009

Я создал механизм для чтения списка URL-адресов из файла XML и загрузки их в фоновом режиме или по запросу (в зависимости от того, что наступит раньше). Предварительная загрузка просто загружает изображение и НИЧЕГО НЕ ДЕЛАЕТ С ЭТОМ; это зависит от кэша браузера, чтобы удерживать это изображение до тех пор, пока пользовательский интерфейс не выполнит «загрузку» и мгновенно вернет его.

GalleryImageItem.status больше для отладки, чем для чего-либо еще. Пользовательский интерфейс ничего не знает о предварительном загрузчике (и не должен согласовываться с ним).

Приветствия

<code>
         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 }
        }
    }
</code>
0 голосов
/ 06 января 2009

Насколько мне известно, нет готового механизма, нет, но вы всегда можете просто загрузить изображения на таймер, с помощью URLLoader, чтобы извлечь и сохранить байты каждого из них. изображение, пока они вам не понадобятся. В зависимости от того, как настроена ваша модель (например, вы можете сохранить каждое изображение как ByteArray в ArrayCollection, например), это должно быть относительно простым делом. Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...