Ciao, io ho un problema con il caricamento di una immagine.Io carico e visualizzo correttamente la mia immagine, utilizzando una classe che eredita da MovieClipLoader. Il problema è che a me serve ricavare la proprietà _height e _weight dell'immagine prima che questa sia visualizzata. Al momento riesco a ricavarle solo dopo, con la funzione onLoadInit.Non so se mi sono spiegato.
In altre parole io voglio caricare l'immagine, ricavarne altezza e larghezza e solo dopo visualizzarla.
Ho una classe ImageLoader che eredita da MovieClipLoader, la quale ha un metodo loadClip che utilizza il metodo loadClip della superclasse. Allego il codice delle mie classi in questione
//ho eliminato le parti che non riguardano il problema
class Viewer.Utility_classes.ImageLoader extends MovieClipLoader {
private var target_mc, owner, parentreference:MovieClip;
private var fcolor, sampler:Number;
private var loadmessage, callfunction:String;
private var callbacktarget:Object;
private var result: Boolean = true;
var w,h:Number; //prova
//costruttore, passato il reference al movie clip contenitore
function ImageLoader(reference:MovieClip, parentreference:MovieClip) {
this.owner = reference;
//
if (parentreference) {
this.parentreference = parentreference;
} else {
this.parentreference = this.owner;
}
this.target_mc = this.owner;
}
//metodo che carica l'immagine
public function loadClip(from:String, offsetx:Number, offsety:Number):Void {
clearInterval(this.sampler);
//creo un contenitore per l'immagine
this.target_mc.createEmptyMovieClip("image", 1);
//imposto le coordinate dove sarà posizionata l'immagine
if (offsetx) {
this.target_mc.image._x = offsetx;
}
if (offsety) {
this.target_mc.image._y = offsety;
}
super.loadClip(from, this.target_mc.image);
this.onLoadStart();
}
//metodo invocato quando comincia il caricamneto dell'immagine
public function onLoadStart():Void {
//imposto il messaggio della label
this.setLabel(this.loadmessage);
}
//metodo invocato a caricamento completato
public function onLoadComplete():Void {
//nascondo la barra
this.target_mc.bar._visible = false;
this.target_mc.loadinglabel._visible = false;
//set a reference
this.target_mc.image._parent = this.parentreference;
//comunico che l'immagine è stata caricata
if (this.callbacktarget!=undefined){
this.callbacktarget[this.callfunction]();
}
clearInterval(this.sampler);
}
public function onLoadInit():Void {
trace(this.target_mc.image._height);
}
//metodo che setta la funzione di callback
public function setCallback(owner:Object,callfunction:String):Void {
this.callbacktarget=owner;
this.callfunction=callfunction;
}
}
import Viewer.Utility_classes.ImageLoader;
import Viewer.Viewer_classes.Viewer_CSS;
import Viewer.Utility_classes.DrawShape;
//
class Viewer.Viewer_classes.Viewer_image extends MovieClip{
//############ ATTACH ON THE FLY ###############################################
static var symbolName:String = "__Packages.Viewer.Viewer_classes.Viewer_image ";
static var symbolOwner:Function = Viewer.Viewer_classes.Viewer_image;
static var symbolLinked:Object = Object.registerClass(symbolName, symbolOwner);
//############ ATTACH ON THE FLY ###############################################
private var img, border:MovieClip;
private var struct:Array;
private var loader:ImageLoader;
private var w,h:Number;
private var mother:Object;
private var cssExtractor:Viewer_CSS;
//costruttore
function Viewer_image(){
//applico l'offset, di default allineamento in alto a sinistra
this._x=this._y=this.mother.offset;
//inizialisso l'oggetto cssExtractor
this.cssExtractor = new Viewer_CSS(this.mother.style);
//creo un movie clip che conterrà l'immagine
this.createEmptyMovieClip("img", 1);
//sovrascrivo gli attributi dell'immagine con quelli del file css
//tag css
var extracted=this.cssExtractor.getCSSItem("img",this. struct);
//class css
var extracted=this.cssExtractor.getCSSItem("."+this.st ruct.attributes["class"],this.struct);
//css class
var extracted=this.cssExtractor.getCSSItem("#"+this.st ruct.attributes["id"],this.struct);
//converto il formato del colore, da #ffffff a 0xffffff
//colore bordo
if (this.struct.attributes.bordercolor!=undefined){
this.struct.attributes.bordercolor=Number("0x"+(th is.struct.attributes.bordercolor).substr(1, 7));
}else{
//colore bordo di default
this.struct.attributes.bordercolor=0x333333;
}
//colore sfondo
if (this.struct.attributes.bgcolor!=undefined){
this.struct.attributes.bgcolor=Number("0x"+(this.s truct.attributes.bordercolor).substr(1, 7));
}else{
//colore sfondo di default
this.struct.attributes.bgcolor=0xE9E9E9;
}
//se esiste disegno il bordo dell'immagine utilizzando un oggetto di tipo
//drawShape
var drawer=new DrawShape(this);
drawer.drawSquare(0, 0, Number(this.struct.attributes.width), Number(this.struct.attributes.height), this.struct.attributes.bgcolor, 100, this.struct.attributes.border, this.struct.attributes.bordercolor, 100, this.struct.attributes.style);
//inizializzo l'oggetto che sarà utilizzato per caricare l'immagine
this.loader = new ImageLoader(this.img);
//se l'immagine è larga almeno 50px e alta almeno 20px visualizzo la barra di caricamento
if ((Number(this.struct.attributes.width)>=50) && (Number(this.struct.attributes.height)>=20)){
this.loader.viewLoader(this.struct.attributes.bord ercolor, 10, 2, 30, "Loading...");
}
//imposto la funzione di call back da invocare
this.loader.setCallback(this,"clearImageBack");
this.loader.loadClip(this.mother.getPath()+""+this .struct.attributes.src);
}
}
Se qualcuno sa darmi qualche consiglio ne sarei molto grato.... grazie...
ciaoooo