=波波日志 > flash/flex/fcs/AIR > 6.6.动态载入外部图片=
[转]6.6.动态载入外部图片
问题
我要在Flash运行时动态载入图片
解决办法
使用新的Loader类载入图片(jpg,png,gif)
讨论
9.17节将展示如何在编译期通过[Embed] 元数据标签绑定外部文件到Flash。在运行期间载入外部图片或flash需要用到Loader 类。
flash.display.Loader 类非常类似于flash.net.URLLoader 类(19.3节讨论)。不同的是Loader 实例能载入外部图片和flash,在传输数据方面URLLoader更有用些。
载入外部内容需要三个步骤:
创建Loader 类实例
把Loader 实例加到显示列表里
调用load( )方法载入外部内容
load( ) 方法下载图片或.swf文件,它需要一个URLRequest 对象作为参数,该对象指定一个需要下载资源的URL。
下面的例子通过Loader 实例下载一张图片image.jpg :
当运行代码时,播放器寻找.swf 文件所在目录下的图片文件,URLRequest 对象使用相对URL,也可以是绝对URL。如果下载成功会自动当作Loader 实例的子对象。
在载入外部资源的过程中可能会出现错误,比如,可能是URL地址不正确,或者是Flash播放器安全沙漏不允许,或者资源太大需要很长的时间下载,需要一个进度条告诉用户下载进度。
面对这些可能的情况,我们需要添加一个事件去检测它,Loader实例的contentLoaderInfo 属性会对不同的情况作出不同的反应事件。contentLoaderInfo 属性是flash.display.LoaderInfo 类实例,用来提供目标被载入时的信息,下面是LoaderInfo 类的一些有用的事件:
open
当资源开始下载时触发
progress
资源在下载中时触发
complete
当资源下载完成时触发
init
当载入外部的.swf初始化时触发
httpStatus
当载入外部资源的HTTP请求产生状态代码错误时触发
ioError
当一个错误导致下载被终止时触发,比如找不到相应资源
securityError
当试图读取安全沙漏以外的数据时触发
unload
当unload( ) 方法被调用或移除载入的内容时或再次调用load( ) 方法时都会触发该事件
下面的例子演示了contentLoaderInfo.的事件:
运行上面的代码,在控制台上会显示下载百分比等信息。
下面我们修改下代码,在下载的过程中显示百分比。比如handleOpen( ) 方法创建一个显示百分比的文本框,handleProgress( ) 更新文本框的百分比,最后handleComplete( ) 方法进行清除,因为资源已全部下载:
在类中添加_loaderStatus 变量,类型为TextField。
private var _loaderStatus:TextField;
我要在Flash运行时动态载入图片
解决办法
使用新的Loader类载入图片(jpg,png,gif)
讨论
9.17节将展示如何在编译期通过[Embed] 元数据标签绑定外部文件到Flash。在运行期间载入外部图片或flash需要用到Loader 类。
flash.display.Loader 类非常类似于flash.net.URLLoader 类(19.3节讨论)。不同的是Loader 实例能载入外部图片和flash,在传输数据方面URLLoader更有用些。
载入外部内容需要三个步骤:
创建Loader 类实例
把Loader 实例加到显示列表里
调用load( )方法载入外部内容
load( ) 方法下载图片或.swf文件,它需要一个URLRequest 对象作为参数,该对象指定一个需要下载资源的URL。
下面的例子通过Loader 实例下载一张图片image.jpg :
+展开
-ActionScript
package {
import flash.display.*;
import flash.net.URLRequest;
public class LoaderExample extends Sprite {
public function LoaderExample( ) {
// 1. 创建Loader 类实例
var loader:Loader = new Loader( );
// 2. 添加到可视化对象列表
addChild( loader );
// 3. 调用load( )方法
loader.load( new URLRequest( "image.jpg" ) );
}
}
}
import flash.display.*;
import flash.net.URLRequest;
public class LoaderExample extends Sprite {
public function LoaderExample( ) {
// 1. 创建Loader 类实例
var loader:Loader = new Loader( );
// 2. 添加到可视化对象列表
addChild( loader );
// 3. 调用load( )方法
loader.load( new URLRequest( "image.jpg" ) );
}
}
}
当运行代码时,播放器寻找.swf 文件所在目录下的图片文件,URLRequest 对象使用相对URL,也可以是绝对URL。如果下载成功会自动当作Loader 实例的子对象。
在载入外部资源的过程中可能会出现错误,比如,可能是URL地址不正确,或者是Flash播放器安全沙漏不允许,或者资源太大需要很长的时间下载,需要一个进度条告诉用户下载进度。
面对这些可能的情况,我们需要添加一个事件去检测它,Loader实例的contentLoaderInfo 属性会对不同的情况作出不同的反应事件。contentLoaderInfo 属性是flash.display.LoaderInfo 类实例,用来提供目标被载入时的信息,下面是LoaderInfo 类的一些有用的事件:
open
当资源开始下载时触发
progress
资源在下载中时触发
complete
当资源下载完成时触发
init
当载入外部的.swf初始化时触发
httpStatus
当载入外部资源的HTTP请求产生状态代码错误时触发
ioError
当一个错误导致下载被终止时触发,比如找不到相应资源
securityError
当试图读取安全沙漏以外的数据时触发
unload
当unload( ) 方法被调用或移除载入的内容时或再次调用load( ) 方法时都会触发该事件
下面的例子演示了contentLoaderInfo.的事件:
+展开
-ActionScript
package {
import flash.display.*;
import flash.text.*;
import flash.net.URLRequest;
import flash.events.*;
public class LoaderExample extends Sprite {
public function LoaderExample( ) {
// Create the loader and add it to the display list
var loader:Loader = new Loader( );
addChild( loader );
loader.contentLoaderInfo.addEventListener( Event.OPEN, handleOpen );
loader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, handleProgress );
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, handleComplete );
loader.load( new URLRequest( "image.jpg" ) );
}
private function handleOpen( event:Event ):void {
trace( "open" );
}
private function handleProgress( event:ProgressEvent ):void {
var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
trace( "progress, percent = " + percent );
}
private function handleComplete( event:Event ):void {
trace( "complete" );
}
}
}
import flash.display.*;
import flash.text.*;
import flash.net.URLRequest;
import flash.events.*;
public class LoaderExample extends Sprite {
public function LoaderExample( ) {
// Create the loader and add it to the display list
var loader:Loader = new Loader( );
addChild( loader );
loader.contentLoaderInfo.addEventListener( Event.OPEN, handleOpen );
loader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, handleProgress );
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, handleComplete );
loader.load( new URLRequest( "image.jpg" ) );
}
private function handleOpen( event:Event ):void {
trace( "open" );
}
private function handleProgress( event:ProgressEvent ):void {
var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
trace( "progress, percent = " + percent );
}
private function handleComplete( event:Event ):void {
trace( "complete" );
}
}
}
运行上面的代码,在控制台上会显示下载百分比等信息。
下面我们修改下代码,在下载的过程中显示百分比。比如handleOpen( ) 方法创建一个显示百分比的文本框,handleProgress( ) 更新文本框的百分比,最后handleComplete( ) 方法进行清除,因为资源已全部下载:
+展开
-ActionScript
private function handleOpen( event:Event ):void {
_loaderStatus = new TextField( );
addChild( loaderStatus );
_loaderStatus.text = "Loading: 0%";
}
private function handleProgress( event:ProgressEvent ):void {
var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
_loaderStatus.text = "Loading: " + percent + "%";
}
private function handleComplete( event:Event ):void {
removeChild( loaderStatus );
_loaderStatus = null;
}
_loaderStatus = new TextField( );
addChild( loaderStatus );
_loaderStatus.text = "Loading: 0%";
}
private function handleProgress( event:ProgressEvent ):void {
var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
_loaderStatus.text = "Loading: " + percent + "%";
}
private function handleComplete( event:Event ):void {
removeChild( loaderStatus );
_loaderStatus = null;
}
在类中添加_loaderStatus 变量,类型为TextField。
private var _loaderStatus:TextField;
类别:flash/flex/fcs/AIR 作者:转载 日期:2010-02-25 【评论:0】
暂时没有评论!
发表留言
百度赞助
同类热门博文
- ·As+lightbox+js实现..
- ·21.8.使用Cairngorm..
- ·13.1.为ArrayCollec..
- ·18.13.通过二进制So..
- ·22.7.使用ModuleLoa..
- ·JavaScript控制Flas..
- ·flash预加载进度条p..
- ·7.13.用渐变色填充图..
博格Tag
- flash/flex/fcs/AIR(752)
- Asp.Net/C#/WCF(598)
- 操作系统及应用软件(376)
- JavaScript/Ajax(330)
- SQL及数据库(134)
- 黑客技术(115)
- Asp/VBScript(111)
- HTML/WML/CSS兼容/XML(102)
- PHP/apache/Perl(96)
- 网站排名及优化(96)
- 其他(75)
- showbo日志(66)
- lucene.net/分词技术(33)
- 计算机网络(26)
- 机械重工(26)
- C#设计模式(25)
- Google Maps开发(17)
- 日语学习(15)
- Canvas/VML/SVG(13)
- linux(11)
- 游戏开发(8)
- 正则表达式(5)
- Jsp/Java(4)
最新博文
- ·PHP socket套接字学..
- ·Warning Cannot sen..
- ·php与flash as3 soc..
- ·Flash XMLSocket使用..
- ·给flash右键增加自定..
- ·flash控件html及col..
- ·Flash加载XML文件CD..
- ·Flex3中文教程--hom..
随机博文
