编写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" 后 完美解决。

文档的加载可能还有好的方法,请赐教。我继续学习了。晚上或者明天再继续写。

相关文章
相关标签/搜索