Flex 4.x 下载进度不出现问题解决办法

有人問 Flex 4, 4.5 Spark 的 Download Progress Bar 不出現的問題
Adobe 討論板上也有人問 原因大略是因為 Flex 4, 4.5 提高了出現的門檻
原本 MX 版 Progress Bar 是要超過 300ms 才會出現
Spark 版 Progress Bar 要超過 700ms 且下載進度未超過 50% 才會出現
條件相當嚴苛,導致一般的小 Flex App 都看不到下載進度條了

解決的方式不難,自己繼承 SparkDownloadProgressBar 並覆寫 showDisplayForDownloading

package {
 import flash.events.ProgressEvent;
 import mx.preloaders.SparkDownloadProgressBar;
 
 public class MySparkDownloadProgressBar extends SparkDownloadProgressBar {
 
  override protected function showDisplayForDownloading(elapsedTime:int, event:ProgressEvent):Boolean {
   /*/
   trace("showDisplayForDownloading: elapsedTime = " + elapsedTime);
   trace("showDisplayForDownloading:" + event.bytesLoaded + " " +
    event.bytesTotal + " " + (event.bytesLoaded < event.bytesTotal / 2));
   //*/
 
   return elapsedTime > 100;
   // return elapsedTime > 700 && event.bytesLoaded < event.bytesTotal / 2;
  }
 }
}

然後在 Application 替換為自訂的 Preloader 就好了:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  xmlns:s="library://ns.adobe.com/flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx"
  preloader="MySparkDownloadProgressBar">
 
 <s:layout>
  <s:VerticalLayout verticalAlign="middle" horizontalAlign="center"/>
 </s:layout>
 
 <s:Button label="Button" />
 
</s:Application>

假如想要調整 MX 版 Progress Bar 出現門檻,方法也是類似
只是要覆寫的 function 不一樣

package {
 import mx.preloaders.DownloadProgressBar;
 
 public class MyDownloadProgressBar extends DownloadProgressBar {
 
  override protected function showDisplayForInit(elapsedTime:int, count:int):Boolean {
   return elapsedTime > 300 && count == 2;
  }
 
 }
}

http://www.5uflash.com/Flex-AIR/Flexziliao/6382.html

转:
posted @ 2011-08-05 14:04  lovecd  阅读(165)  评论(0编辑  收藏  举报