Comunidad de diseño web y desarrollo en internet online

Precargar imágenes en Flex 3

Citar            
MensajeEscrito el 27 Dic 2010 09:06 pm
Hola a todos.

Tengo una aplicación en Flex 3 que carga un archivo xml. Esta carga la hago en una función que llamo desde el evento ApplicationComplete. En el archivo xml tengo la ruta de varias cosas que debo cargar en mi aplicación: PDFs, SWFs, imágenes... En esta última es donde requiero ayuda, pues de entrada la aplicación debe cargar una imagen, sin embargo su proceso de carga es un poco lento y me la muestra algunos segundos después de visualizada la interfaz. El código en cuestión es el siguiente:

Código Flex :

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()">
<mx:Script>
      <![CDATA[
         public function loadXML():void{
            cargarXML("XML/miCurso.xml");
         }
         private function cargarXML(idXML:String):void{
            cargador_XML = new URLLoader();
            cargador_XML.load(new URLRequest(idXML));
            cargador_XML.addEventListener(Event.COMPLETE, completeHandler);
         }
         private function completeHandler(event:Event):void{
                     _xml = new XML(cargador_XML.data);
                     myTree.dataProvider = _xml;
                     titulo.text = _xml.@id;
                     imagenCurso.source = _xml.@imagen; //imagenCurso es un componente Image
               }
      ]]>
   </mx:Script>


Lo que quiero, en resumen, es lograr que sólo se muestre la interfaz cuando se hayan cargado (o precargado) los recursos necesarios (esto es, la imagen). He probado vincular la función de carga al evento Initialize, pero no he obtenido buenos resultados.

¿Alguna idea? Se agradece de antemano.

Saludos!!!

Por ExGaul

Claber

180 de clabLevel



Genero:Masculino  

Cereté - Colombia

chrome
Citar            
MensajeEscrito el 27 Dic 2010 11:45 pm
No se de que herede el componente image pero me imagino que de loader, checa a ver si puedes agregarle un listener que sea de progressEvent para que hagas la precarga.

Debe de poderse, si no le encuentras vuelta entonces yo te recomendaria usar un Loader (checalo en la documentacion) y en el loader haces toda la gestion de la carga y para mostrarlo a escena ps ya sea que metas el loader en un canvas con un addChild (donde el canvas reemplazaria a tu componente image)

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Dic 2010 02:12 pm
Gracias por tu respuesta, Ángel Roberto.

Sí, la solución que planteas es muy lógica, el asunto es que, como se ve en el código, la imagen se carga dinámicamente, y dependiendo de otras variables cuando mi aplicación se cargue, será diferente cada vez.

Como se ve en el código, primero se carga un xml que contiene la ruta de la imagen, entre otras cosas. Lo que quiero es que no se muestre la aplicación hasta tanto todo eso no se haya cargado, es decir, cargar xml, imagen, y todo lo demás mientras se está mostrando la barra de loading por defecto de la aplicación flex, y que al mostrar la interfaz ya todo esté cargado y en su sitio, no sé si me explico.

Pienso que puede ser en alguno de los eventos de Application (ya sea initialize o preinitialize) pero no he obtenido buenos resultados usándolos. ¿Alguien me echa una mano? Gracias.

Saludos!!!

Por ExGaul

Claber

180 de clabLevel



Genero:Masculino  

Cereté - Colombia

chrome
Citar            
MensajeEscrito el 28 Dic 2010 05:59 pm
No creo que sea en application ya que application va mandar su complete cuando se cargue la aplicacion o el init cuando inicie la aplicaciony es la aplicacion la que manda cargar las imagenes, por ser objetos de visualizacion deben tener una propiedad visible, no se si te sirva ponerlos en false o la misma palicaicon en visible false y al momento que tu iamgen mande un complete poner visible=true, si es mas de una cosa que se carga (que es comun) lo que acostumbto hacer es mandar llamar en el complete siempre a la misma funcion y con un contador revizar si todo se cargo.

Código ActionScript :

var total:int = 6; //El numero de objetos a cargar
var cargados:int = 0;


fucntion onComplete(e:Event)
{
cargados ++;

if (cargados == total)
{
//Ya se cargaron todos, mandas llamar funcion necesaria
}
}


Saludos!!

Por Angel Roberto

Claber

248 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.