編寫Flex閱讀器 (三) ---------------------一個糾結的問題

     我認可,我是個浮躁的人。昨天送走了媽媽,而後又開始坐下來學習。但是,仍是發現進度太慢了。並且本身以爲有了JavaScript和HTML的基礎,可能Flex+ActionScript 上我能夠少花些功夫。急於求成的召喚,讓我開始了直接看源碼。html

     E4X的源碼,看着是比較糾結。再到後來,乾脆直接開始寫編輯器。一弄弄到今天凌晨1點,沒辦法,睡神開始召喚了,因此倒下就睡了。廢話不說了,  先上圖吧!編輯器

     QQ截圖20121006082214

    寫以前,我看了網上的動態加載,講的頭大,後來看到了Flex中如何利用睡醒空間(Tree Control)和SWFLoader空間建立簡單圖片相冊例子以爲很是好,就仿寫了一個(在連接中有源碼)。果真我原本使用icon圖片,結果不能正常的顯示,最後換成了jpg的圖片。正常顯示。ide

 QQ截圖20121006082836

這是我將圖片換成了SWF文檔(使用pdf2swf轉化的)後的效果。學習

在寫這個的過程當中,發現要在Flex中使用樹,實在是太簡單了 測試

  
< mx:XML id ="myXML" source ="source/tree.xml" /> < mx:Tree dataprovider =" {myXML} " />

就這樣,一個樹就生成了。我也在網上查看了樹的一些資料。大呼好東西啊。spa

經過這個代碼的仿寫後,接着,我就開始了個人閱讀器的編寫。.net

在編寫以前還有一個問題一直困擾着我,那就是動態的加載Controller。雖然是個看似簡單的問題,我還真琢磨了好久。最後也是在上面的哪一個程序的基礎上,我開始了測試。動態添加code

SWFLoader。經過直接的 xml

  
var loader:mx.controller.SWFLoader = new mx.controller.SWFLoader(); loader.id = 'loader_' + 1; swf_content.addChild(loader);

這一段代碼完成了動態生成swfloader,並添加到了指定位置,而後能夠對loader進行文件的源控制。實現動態加載。htm

爲了滾動條不會由於動態加載內容而跳動,因此,我在每個生成的swfloader的尺寸定下來,並按照前一個的尺寸計算。這樣即便動態的加載仍是不會讓滾動條跳動。

  
<? xml version="1.0" encoding="utf-8" ?> < mx:Application xmlns:mx ="http://www.adobe.com/2006/mxml" layout ="absolute" creationComplete ="init()" > < mx:Script > <![CDATA[ import mx.controls.scrollClasses.ScrollBar; import mx.events.ScrollEvent; import mx.controls.SWFLoader; import mx.controls.Alert; private var pathes:Array = ["source/swf/1.swf","source/swf/2.swf","source/swf/3.swf","source/swf/4.swf","source/swf/5.swf",]; private var ySize:Number = 800; private var last_page:Number = 3; private var page_count:Number =pathes.length; private function init():void { for(var i:Number = 0;i< pathes.length;i++) { var swf_loader:SWFLoader = new SWFLoader(); swf_loader.id = 'swf_content_' + (i+1); swf_loader.name = 'swf_content_' + (i+1); if(i < last_page) { swf_loader.source = pathes[i]; } swf_loader.height = ySize; swf_loader.width = 600; swf_loader.addEventListener(Event.COMPLETE,complete); swf_context.addChild(swf_loader); } swf_context.status = swf_context.childDescriptors.length.toString(); } private function complete():void { swf_context.status = swf_context.childDescriptors.length.toString(); } private function dymic_load(e:ScrollEvent):void { main_panel.status = e.position.toString(); var vertical_y:Number = e.position; var current_view_page:Number = (vertical_y - vertical_y % ySize)/ySize; main_panel.status = (current_view_page + 1).toString(); if ((current_view_page + 1) > (last_page -2) && last_page <= page_count) { last_page ++; Alert('d'); //var swf:SWFLoader = getChildByName('swf_content_' + last_page) as SWFLoader; //swf.source = pathes[last_page-1]; } } ]]> </ mx:Script > < mx:Panel id ="main_panel" width ="650" height ="730" backgroundColor ="#FFFFFF" layout ="vertical" verticalScrollPolicy ="off" horizontalScrollPolicy ="off" horizontalAlign ="center" > < mx:Panel id ="swf_context" left ="5" right ="5" height ="700" width ="640" backgroundColor ="#F0F0F0" layout ="vertical" horizontalAlign ="center" scroll ="dymic_load(event)" > </ mx:Panel > </ mx:Panel > </ mx:Application >

剛開始的滾動條,一直附着在main_panel內,後來對main_panel添加了  verticalScrollPolicy="off"  horizontalScrollPolicy="off" 後 完美解決。

文檔的加載可能還有好的方法,請賜教。我繼續學習了。晚上或者明天再繼續寫。

相關文章
相關標籤/搜索