设为首页收藏本站

就爱编程论坛

 找回密码
 注册

人人连接登陆

无需注册,直接登录

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 839|回复: 0
打印 上一主题 下一主题

Flash动态加载外部图片 [复制链接]

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    无聊
    2025-5-27 03:37:20
  • 签到天数: 366 天

    [LV.9]以坛为家II

    论坛先锋 学习至圣 荣誉成员 论坛元老 活跃之星 终极领袖

    我玩的应用:

    跳转到指定楼层
    楼主
    发表于 2011-4-30 12:37:21 |只看该作者 |倒序浏览
    一、简介

    初学AS,做了一个从外部调用图片的例子。AS2.0中有MovieClip和全局中有loadMovie函数可以动态加载图片,但是这不是异步加载,而且没法知道图片大小。在AS3.0中,有Loader类来实现从外部载入swf和各种图片。


    二、代码progress.visible =
    false;
    btnSubmit.addEventListener(MouseEvent.CLICK,btnSubmitClickHandler);
    function btnSubmitClickHandler(e:MouseEvent) {
        loadPicture(ddlUrl.value);
    }

    var loader:Loader;
    function loadPicture(url:String) {
       
    if(loader ==
    null){
            loader
    =
    new Loader();
        }
    else{
            loader.unload();
            txtAlert.text
    =
    "";
        }
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHd);
        loader.contentLoaderInfo.addEventListener(
    "ioError",errorHd);
       
    var request:URLRequest =
    new URLRequest(url);
       
    var context:LoaderContext =
    new LoaderContext(true);
        loader.load(request,context);
        progress.visible
    =
    true;
    }

    var maxHeight:int
    = container.height;
    var maxWidth:int
    = container.width;
    function completeHd(e:Event) {
        txtAlert.text
    =
    "* Load success!";
       
    var pic:Bitmap = loader.content as Bitmap;
        pic.smoothing
    =
    true;
       
    var currentWidth:int
    = loader.width;
       
    var currentHeight:int
    = loader.height;
       
    if(currentWidth > maxWidth){
            currentWidth
    = maxWidth;
            currentHeight
    = currentWidth/loader.width * loader.height;
        }
       
    if(currentHeight > maxHeight){
            currentHeight
    = maxHeight;
            currentWidth
    = currentHeight/loader.height * loader.width;
        }
        loader.content.width
    = currentWidth;
        loader.content.height
    = currentHeight;
       
        loader.x
    = (maxWidth - currentWidth)/2;
        loader.y = (maxHeight - currentHeight)/2;
        container.addChild(loader);
        progress.visible
    =
    false;
    }
    function errorHd(e:Event){
        progress.visible
    =
    false;
        txtAlert.text
    =
    "* Url is invalid, Please try again for another url!";
    }

    三、原理

    关键在于对Loader类的使用,Loader具有contentLoaderInfo属性,此属性是一个LoaderInfo类的实例,用来控制加载外部资源的进度,因此就可以在contentLoaderInfo上注册各种事件,这里只用了Complete事件,用于加载完成时调用。

    Loader还具有content属性,Loader实例本身就是一个可视对象,content也是一个可视对象,如果加载的地址是一个图片的话,content是一个Bitmap对象,所以可以通过转型来使得载入的图片在缩小的时候消除锯齿,将Bitmap的smoothing属性设置为true即可。

    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 支持支持0 反对反对0 分享到人人 转发到微博
    [img=http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=fRUcHhYWGAQ9GxIFEBwUEVMeEhA]http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png[/img]

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册 人人连接登陆

    晴云孤魂's Blog|就爱编程搜帖|手机版|Archiver|就爱编程论坛     

    GMT+8, 2025-7-2 14:15 , Processed in 0.262894 second(s), 26 queries .

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    回顶部