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

通过动态代码创建出来的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 +++++

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值