用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
linson0116的公告
文章分类
存档

转载  正确访问SWFLoader下载完了的元素属性 收藏

flex里有个SWFLoader,真是方便群众啊,不过在下载完了后,处理时有个注意点
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
        <![CDATA[
        import mx.controls.Alert;
            private function handlePicture(evt:Event):void
            {
                try
                {
                    var img:Image = Image(evt.target);
                   
                    var s:String = ">>image: " + img + '\n';
                    s += "\twidth: " + img.width + '\n';
                    s += "\theight: " + img.height + '\n';
                    s += "\tcontent: " + img.content + '\n';
                    s += "\tcontentWidth: " + img.contentWidth + '\n'
                    s += "\tcontentHeight: " + img.contentHeight + '\n';
                    Alert.show(s);
                }
                catch(e:Error)
                {
                    Alert.show(e.toString());
                }
            }
        ]]>
    </mx:Script>
    <mx:Image id="my_image" source="test.jpg" complete="handlePicture(event);" />
</mx:Application>

以上代码非常简单,Image是继承SWFLoader的,针对图像,在这里和SWFLoader是一样的.

注意广播事件,用的是complete.熟悉的人应该知道complete和init的差异.
下载内容是图片的话,complete和init是没啥区别的.

好了,那么有什么要注意的么?
如果copy上面程序,编译运行一下的话,就会看到,img的width和height是0,而contentWidth和contentHeight是有值的.
这是因为contentWidth和contentHeight,顾名思义,就是content.width和content.height,而content指的是下载好了的Bitmap对象,当然它的属性是有值的.
而SWFLoader,在下载好后,因为要进行整个样式,尺寸等方面的改变,所以使用了一系列invalidate,而这些是基于callLater的.
关于callLater,可以简单的认为是,把现有要执行的代码,在这一帧的最后执行.
详细的看这里

所以如果在下载完了,马上去访问img的width和height,取到的是不正确的

contentWidth和contentHeight这两个属性在手册上是有提起的.
可以看这里

了解了这点就可以继续工作了,如果非要等img也完全赋值了才进行,可以通过下面这个比较bt的方法
<mx:Image id="my_image" source="test.jpg" complete="callLater(callLater, [handlePicture,[event]]);" />
呵呵,通过两个callLater,把handlePicture放到比invalidate还后面执行,这样就可以了
 

发表于 @ 2007年01月15日 15:29:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:FLEX _HTTPService的调用方法  | 新一篇:在flex中如何使用嵌入字体

  • 发表评论
  • 评论内容:
  •  
Copyright © linson0116
Powered by CSDN Blog