Flex如何得到动态创建的Image尺寸
2014-12-03 10:14
316 查看
通过动态代码创建出来的Image尺寸,Width与Height都为0,效果如下:
主程序文件:WhatScaleImage.mxml
结果是Image, imgContainer(包容Image的边框容器)都为0。
可以通过contentLoaderInfo方法来返回与正在加载的对象相对应的内容。
contentLoaderInfo():LoaderInfo
[只读] 返回与正在加载的对象相对应的 LoaderInfo 对象。
LoaderInfo 对象在Loader对象和加载的内容对象之间共享,提供有关加载的文件的加载进度信息和统计,可以在加载前将事件侦听器添加到该对象,从而获得相应的信息。
***********************************************
修改Script代码如下:
注:imgLoader.contentLoaderInfo.addEventListener监听中的函数是最后才执行的,因此imgText,containerText放在里面
img的Width与Height能正确读取了
但是容器imgContainer的Width与Height不正确,通过调试查看imgContainer相关的数值也没正确读出加载img后的尺寸。
后来经人指点后,对imgContainer进行ReSizeEvent事件监听,终可以获得到imgContainer加载img的尺寸
在imgLoader.contentLoaderInfo.addEventListener函数中,对imgContainer添加Resize监听,代码如下:
总结:
Loader 类可用于加载SWF文件或图像(JPG、PNG 或 GIF)文件,使用
URLRequest类可捕获单个HTTP请求中的所有信息。URLRequest 对象将传递给Loader、URLStream和URLLoader 类的load()方法和其他加载操作,以便启动URL下载。
contentLoaderInfo[只读] 返回与正在加载的对象相对应的LoaderInfo对象。
+++ The End +++++
主程序文件: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 +++++
相关文章推荐
- flex中mouseevent事件中如何获得几个动态创建的linkbutton的label值?
- Android中如何在ViewPager中使动态创建的ImageView铺满屏幕
- 通过反射动态创建了一个控件,如何再用发射通过该控件的名字得到该控件呢?
- FLEX如何动态创建DataGrid组件详解
- 如何:在 DataList Web 服务器控件中动态创建模板
- 如何动态创建网页的RSS内容摘要
- 在.NET上如何根据字符串动态创建控件
- MS SQLSERVER 中如何得到表的创建语句
- MS SQLSERVER 中如何得到表的创建语句
- ABAP--如何创建动态结构的报表
- ABAP--如何创建动态结构的报表
- 如何在面板中创建动态内容的经典代码
- 有一动态生成的TABLE,当点击该TABLE中的按钮时,如何得到该按钮所在行的某一列的值啊?
- SQLSREVER如何创建和使用动态游标
- 如何动态创建按钮,并响应消息
- ABAP--如何创建动态结构的报表
- 在.NET上如何根据字符串动态创建控件
- 在.NET上如何根据字符串动态创建控件
- 如何动态创建水晶报表
- 【MFC】非Dialog中的控件或动态创建的控件如何支持Tab键切换焦点?答案很简单……