加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex 预载界面美化

发布时间:2020-12-15 01:16:03 所属栏目:百科 来源:网络整理
导读:? Flex 的默认的 Preloader,平心而论,不是很好看。一个个性化的Preloader,基本上要包括三个部分 1. 公司或者网站Logo,或者个性化的预载图片。好似是桌面软件的Splash Screen。 2. 载入数据的进度,文字形式的百分比。 3. 载入进度条 preloader不像Flex项
?

Flex 的默认的 Preloader,平心而论,不是很好看。一个个性化的Preloader,基本上要包括三个部分

1. 公司或者网站Logo,或者个性化的预载图片。好似是桌面软件的Splash Screen。

2. 载入数据的进度,文字形式的百分比。

3. 载入进度条

preloader不像Flex项目中普通的部件可以通过CSS进行设置,是因为当程序初始载入时,CSS文件的设定还未被载入,所以不好通过CSS进行外观的控制

这里有Ted把SWF,GIF 和 PNG 文件作为 Preloader 的教程。不过这里没有上述元素三合一的例子。

把网上的资料总结一下,这里放个三合一的例子。最终效果预览,


?

设置WEB程序的Preloader为自制的Preloader时,要修改主程序Application标签中的preloader属性,

Flex代码

?

  1. <?xml?version="1.0"?encoding="utf-8"?>??? ??
  2. <MX:APPLICATION?xmlns:mx="http://www.adobe.com/2006/mxml"?layout="absolute"?preloader="com.ibsol.view.Preloader">??? ??
  3. <MX:SCRIPT>??? ??
  4. ....</MX:SCRIPT></MX:APPLICATION>????

?

这里的com.ibsol.view.Preloader是自定义Preloader类的路径。

?

Preloader要扩展DownloadProgressBar类才能设置自己的Preloader

Flex代码

?

  1. package?com.ibsol.view ??
  2. { ??
  3. ????import?flash.display.Sprite; ??
  4. ????import?flash.events.Event; ??
  5. ????import?flash.events.ProgressEvent; ??
  6. ????import?flash.events.TimerEvent; ??
  7. ????import?flash.text.TextField; ??
  8. ????import?flash.utils.Timer; ??
  9. ???? ??
  10. ????import?mx.events.FlexEvent; ??
  11. ????import?mx.preloaders.DownloadProgressBar; ??
  12. ???????? ??
  13. ????????/** ??
  14. ?????????*?自定义加载页面 ??
  15. ?????????*?*/ ??
  16. ????public?class?Preloader?extends?DownloadProgressBar ??
  17. ????{ ??
  18. ????????????//显示进度文字 ??
  19. ????????private?var?progressText:TextField; ??
  20. ????????????//进度条 ??
  21. ????????private?var?img:WelcomeScreen; ??
  22. ????????????//logo页面 ??
  23. ????????private?var?logo:WelcomeLogo; ??
  24. ????????private?var?_timer:Timer; ??
  25. ???????? ??
  26. ????????????/** ??
  27. ?????????????*?初始化方法 ??
  28. ?????????????*?*/??????? ??
  29. ????????public?function?Preloader() ??
  30. ????????{ ??
  31. ????????????super(); ??
  32. ????????????//将logo添加到当前页面 ??
  33. ????????????logo=new?WelcomeLogo(); ??
  34. ????????????this.addChild(logo); ??
  35. ????????????//将进度条添加到当前页面 ??
  36. ????????????img=new?WelcomeScreen(); ??
  37. ????????????this.addChild(img); ??
  38. ????????????//加入进度条文字 ??
  39. ????????????progressText=new?TextField(); ??
  40. ????????????progressText.x=40; ??
  41. ????????????progressText.y=90; ??
  42. ????????????this.addChild(progressText); ??
  43. ????????????//进度条计时器初始化,实现进度条的原理就是不停的刷新进度条图片 ??
  44. ????????????//因为每次进度条的长度不同,所以就有进度条在走的效果 ??
  45. ????????????_timer=new?Timer(1); ??
  46. ????????????_timer.addEventListener(TimerEvent.TIMER,drawTimerHandler); ??
  47. ????????????_timer.start(); ??
  48. ????????} ??
  49. ????????override?public?function?set?preloader(value:Sprite):void ??
  50. ????????{ ??
  51. ????????????value.addEventListener(ProgressEvent.PROGRESS,progHandler); ??
  52. ????????????value.addEventListener(FlexEvent.INIT_COMPLETE,initCompleteHandler); ??
  53. ????????????????//在这里设置预加载页面居中 ??
  54. ????????????????//如果在初始化函数中设置,会有stageWidht和最终大小不一致的错误,而导致不能居中 ??
  55. ????????????????x=(stageWidth/2)-(300/2); ??
  56. ????????????????y=(stageHeight/2)-(180/2); ??
  57. ????????} ??
  58. ????????private?function?progHandler(evt:ProgressEvent):void ??
  59. ????????{ ??
  60. ????????????//计算进度,并且设置文字进度和进度条的进度 ??
  61. ????????????var?prog:Number=evt.bytesLoaded/evt.bytesTotal*100; ??
  62. ????????????progressText.text="已下载"+String(int(prog))+"%"; ??
  63. ????????????if(img) ??
  64. ????????????{ ??
  65. ????????????????img.progress=prog; ??
  66. ????????????} ??
  67. ????????} ??
  68. ????????private?function?compHandler(evt:Event):void ??
  69. ????????{} ??
  70. ????????private?function?initCompleteHandler(evt:FlexEvent):void ??
  71. ????????{ ??
  72. ????????????//如果载入完毕,则停止刷新 ??
  73. ????????????img.ready=true; ??
  74. ????????????_timer.stop(); ??
  75. ????????????//这里是测试,下载完毕后,不马上跳到程序默认界面,而是停留10秒后再跳入 ??
  76. ????????????var?timer:Timer=new?Timer(1000,1); ??
  77. ????????????timer.addEventListener(TimerEvent.TIMER,dispatchComplete); ??
  78. ????????????timer.start(); ??
  79. ????????} ??
  80. ????????private?function?initProgHandler(evt:FlexEvent):void?? ??
  81. ????????{} ??
  82. ????????private?function?dispatchComplete(evt:TimerEvent):void ??
  83. ????????{ ??
  84. ????????????//一定要分发这个事件,来通知程序已完全下载,可以进入程序的默认界面 ??
  85. ????????????this.dispatchEvent(new?Event(Event.COMPLETE)); ??
  86. ????????} ??
  87. ???????? ??
  88. ????????????//计时器监听事件 ??
  89. ????????private?function?drawTimerHandler(evt:TimerEvent):void ??
  90. ????????{ ??
  91. ????????img.refresh(); ??
  92. ????????} ??
  93. ???????? ??
  94. ????} ??
  95. }??

?

图片logo层的实现方法:

Flex代码

?

  1. package?com.ibsol.view ??
  2. { ??
  3. ????import?flash.display.Loader; ??
  4. ????import?flash.utils.ByteArray; ??
  5. ???????? ??
  6. ????????/** ??
  7. ?????????*?图片logo层 ??
  8. ?????????*?*/ ??
  9. ????public?class?WelcomeLogo?extends?Loader ??
  10. ????{ ??
  11. ????????[Embed(source="img/logo.png",mimeType="application/octet-stream")] ??
  12. ????????public?var?WelcomeScreenGraphic:Class; ??
  13. ????????/** ??
  14. ?????????*?初始化方法 ??
  15. ?????????*?*/ ??
  16. ????????public?function?WelcomeLogo() ??
  17. ????????{ ??
  18. ????????????this.loadBytes(new?WelcomeScreenGraphic()?as?ByteArray); ??
  19. ????????} ??
  20. ??
  21. ????} ??
  22. }??

?

进度条和图片可以放在一层,但是考虑到个时钟周期,都要刷新进度条的图片。

?

毕竟LOGO不用每次都刷新,那么我们就分开放置了。进度条层的代码如下,

Flex代码

?

  1. package?com.ibsol.view ??
  2. { ??
  3. ????import?flash.display.BitmapData; ??
  4. ????import?flash.display.Graphics; ??
  5. ????import?flash.display.Loader; ??
  6. ????import?flash.display.Sprite; ??
  7. ???? ??
  8. ????import?mx.graphics.codec.PNGEncoder; ??
  9. ???? ??
  10. ????public?class?WelcomeScreen?extends?Loader ??
  11. ????{ ??
  12. ????????//辅助属性,帮助进度条定位 ??
  13. ????????private?static?var?_LogoWidth:int=300; ??
  14. ????????private?static?var?_LogoHeight:int=180; ??
  15. ????????private?static?var?_LeftMargin:int=5; ??
  16. ????????private?static?var?_RightMargin:int=5; ??
  17. ????????private?static?var?_Topmargin:int=1; ??
  18. ????????private?static?var?_BottomMargin:int=1; ??
  19. ????????private?static?var?_Padding:int=-60; ??
  20. ???????? ??
  21. ????????//进度条的样式的设定,如边框颜色等 ??
  22. ????????private?static?var?_BarWidth:int=200; ??
  23. ????????private?static?var?_BarHeight:int=12; ??
  24. ????????private?static?var?_BarBackground:uint=0xFFFFFF; ??
  25. ????????private?static?var?_BarOuterBorder:uint=0x737373; ??
  26. ????????private?static?var?_BarColor:uint=0x6F9FD5; ??
  27. ????????private?static?var?_BarInnerColor:uint=0xFFFFFF; ??
  28. ???????? ??
  29. ????????private?var?isReady:Boolean=false; ??
  30. ????????public?var?progress:Number; ??
  31. ????????private?var?_logoData:BitmapData;? ??
  32. ???????? ??
  33. ????????????/** ??
  34. ?????????????*?初始化方法 ??
  35. ?????????????*?*/ ??
  36. ????????public?function?WelcomeScreen() ??
  37. ????????{ ??
  38. ????????} ??
  39. ????????override?public?function?get?width():Number ??
  40. ????????{ ??
  41. ????????????return?Math.max(_BarWidth,_LogoWidth)+_LeftMargin+_RightMargin; ??
  42. ????????} ??
  43. ????????override?public?function?get?height():Number ??
  44. ????????{ ??
  45. ????????????return?_LogoHeight+_LogoHeight+_Topmargin+_Padding; ??
  46. ????????} ??
  47. ????????????/** ??
  48. ?????????????*?进度条加载完毕后,隐藏进度条 ??
  49. ?????????????*?*/ ??
  50. ????????public?function?set?ready(value:Boolean):void ??
  51. ????????{ ??
  52. ????????????this.isReady=value; ??
  53. //??????????this.visible=!isReady; ??
  54. ????????} ??
  55. ????????public?function?get?ready():Boolean ??
  56. ????????{???return?isReady;?????} ??
  57. ???????? ??
  58. ????????????/** ??
  59. ?????????????*?刷新方法,每个时钟周期都被调用这个函数 ??
  60. ?????????????*?*/ ??
  61. ????????public?function?refresh():void ??
  62. ????????{ ??
  63. ????????????_logoData=this.drawProgressBar(); ??
  64. ????????????var?encoder:PNGEncoder=new?PNGEncoder(); ??
  65. ????????????this.loadBytes(encoder.encode(_logoData)); ??
  66. ????????} ??
  67. ????????????/** ??
  68. ?????????????*?生成进度条函数 ??
  69. ?????????????*?*/ ??
  70. ????????public?function?drawProgressBar():BitmapData ??
  71. ????????{ ??
  72. ????????????//创建bitmapdata对象 ??
  73. ????????????var?data:BitmapData=new?BitmapData(this.width,this.height,true,0); ??
  74. ????????????//画出bitmapdata ??
  75. ????????????var?s:Sprite=new?Sprite(); ??
  76. ????????????var?g:Graphics=s.graphics; ??
  77. ????????????g.beginFill(_BarBackground); ??
  78. ????????????g.lineStyle(2,_BarOuterBorder,1,true); ??
  79. ????????????var?px:int=(this.width-_BarWidth)/2; ??
  80. ????????????var?py:int=_Topmargin+_LogoHeight+_Padding; ??
  81. ????????????g.drawRoundRect(px,?py,?_BarWidth,?_BarHeight,?2); ??
  82. ????????????var?containerWidth:Number=_BarWidth-4; ??
  83. ????????????var?progWidth:Number=containerWidth*this.progress/100; ??
  84. ????????????g.beginFill(_BarColor); ??
  85. ????????????g.lineStyle(1,?_BarInnerColor,?1,?true);? ??
  86. ????????????data.draw(s); ??
  87. ????????????return?data; ??
  88. ????????}???? ??
  89. ???????? ??
  90. ??
  91. ????} ??
  92. }??

?

http://wwwflex.iteye.com/blog/808484

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读