通过动态代码创建出来的Image尺寸,Width与Height都为0,效果如下:
主程序文件:WhatScaleImage.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application ... creationComplete="initComplete(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import spark.components.BorderContainer;
import spark.components.Image;
private var img:Image;
private var imgContainer:BorderContainer;
private var thisObj:WhatScaleImage;
protected function initComplete(event:FlexEvent):void
{
thisObj=this;
// TODO Auto-generated method stub
imgContainer=new BorderContainer();
imgContainer.top=60;
img=new Image();
img.left=img.right=img.top=img.bottom=10;
img.source="assets/Photos/Pic14.jpg";
imgContainer.addElement(img);
thisObj.addElement(imgContainer);
imgText.text="Image Original Scale:263x270\n**Image's Width:"+
img.width.toString()+
", Image's Height:"+img.height.toString();
containerText.text="**imgContainer's width:"+
imgContainer.width.toString()+
", imgContainer's Height:"+imgContainer.height.toString();
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:Label id="imgText" left="10" top="10" />
<s:Label id="containerText" left="10" top="40" />
</s:Application>
结果是Image, imgContainer(包容Image的边框容器)都为0。
可以通过contentLoaderInfo方法来返回与正在加载的对象相对应的内容。
contentLoaderInfo():LoaderInfo
[只读] 返回与正在加载的对象相对应的 LoaderInfo 对象。
LoaderInfo 对象在Loader对象和加载的内容对象之间共享,提供有关加载的文件的加载进度信息和统计,可以在加载前将事件侦听器添加到该对象,从而获得相应的信息。
***********************************************
修改Script代码如下:
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import spark.components.BorderContainer;
import spark.components.Image;
private var img:Image;
private var imgContainer:BorderContainer;
private var thisObj:WhatScaleImage;
private var imgLoader:Loader;
private var imgURLRequest:URLRequest;
protected function initComplete(event:FlexEvent):void
{
thisObj=this;
// TODO Auto-generated method stub
imgContainer=new BorderContainer();
imgContainer.top=60;
img=new Image();
img.left=img.right=img.top=img.bottom=10;
// img.source="assets/Photos/Pic14.jpg";
imgURLRequest=new URLRequest("assets/Photos/Pic14.jpg");
imgLoader=new Loader();
imgLoader.load(imgURLRequest);
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,function(evt:Event):void{
img.source=evt.currentTarget.content as Bitmap;
img.width=evt.currentTarget.width;
img.height=evt.currentTarget.height;
imgText.text="Image Original Scale:263x270\n**Image's Width:"+img.width.toString()+
", Image's Height:"+img.height.toString();
containerText.text="**imgContainer's width:"+imgContainer.width.toString()+
", imgContainer's Height:"+imgContainer.height.toString();
// 即使放在这儿来装载img后,imgContainer的width与height也是不正确
// imgContainer.addElement(img);
// thisObj.addElement(imgContainer);
});
imgContainer.addElement(img);
thisObj.addElement(imgContainer);
}
]]>
</fx:Script>
注:imgLoader.contentLoaderInfo.addEventListener监听中的函数是最后才执行的,因此imgText,containerText放在里面
img的Width与Height能正确读取了
但是容器imgContainer的Width与Height不正确,通过调试查看imgContainer相关的数值也没正确读出加载img后的尺寸。
后来经人指点后,对imgContainer进行ReSizeEvent事件监听,终可以获得到imgContainer加载img的尺寸
在imgLoader.contentLoaderInfo.addEventListener函数中,对imgContainer添加Resize监听,代码如下:
....
imgContainer.addEventListener(ResizeEvent.RESIZE,function(resize:ResizeEvent):void{
containerText.text="**imgContainer's width:"+imgContainer.width.toString()+
", imgContainer's Height:"+imgContainer.height.toString();
});
...
总结:
Loader 类可用于加载SWF文件或图像(JPG、PNG 或 GIF)文件,使用load()
方法来启动加载,被加载的显示对象将作为Loader对象的子级添加。
URLRequest类可捕获单个HTTP请求中的所有信息。URLRequest 对象将传递给Loader、URLStream和URLLoader 类的load()方法和其他加载操作,以便启动URL下载。
contentLoaderInfo[只读] 返回与正在加载的对象相对应的LoaderInfo对象。
+++ The End +++++