您的位置:首页 > 其它

Flex如何得到动态创建的Image尺寸

2014-12-03 10:14 316 查看
通过动态代码创建出来的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 +++++
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: