这个连接时Adobe官方的一个例子
http://examples.adobe.com/flex3/devnet/networkmonitor/main.html
相信大家都看过
而且肯定会对其中ViewStack切换时候的动画产生兴趣...
小弟不才,看了半天源码,只能做成这个小例子,希望大家指教
例子代码:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="200" minHeight="200" width="200" height="200"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.core.UIComponent; import mx.effects.Move; /** * xs1和ys1 是管理布局的简化体 * 如果复杂化,则叫做LayoutManager */ public var xs1:Array = new Array(10,10,10,10); public var ys1:Array = new Array(10,40,70,100); /** * xs2和ys2同上 */ public var xs2:Array = new Array(10,58,106,154); public var ys2:Array = new Array(10,10,10,10); /** * 贴换标志,这个变量很多时候是 * ViewStack或者Tab等组件 * 中的SelectItem,不一定是Boolean型 */ public var flag:Boolean = false; /** * 形变方案 * 当然,如果要应用的话,需要监听 * 效果执行完毕事件,然后再执行后面的代码 * 否则会布局出错 */ public function changeXY():void { if (flag) { moveTo(b1,xs2[0],ys2[0]); moveTo(b2,xs2[1],ys2[1]); moveTo(b3,xs2[2],ys2[2]); moveTo(b4,xs2[3],ys2[3]); } else { moveTo(b1,xs1[0],ys1[0]); moveTo(b2,xs1[1],ys1[1]); moveTo(b3,xs1[2],ys1[2]); moveTo(b4,xs1[3],ys1[3]); } /**切换标志*/ flag = !flag; } /** * 制作效果,这个自由发挥 */ public function moveTo(object:UIComponent,targetX:int,targetY:int):void { if (object.x != targetX || object.y != targetY) { var m:Move = new Move(object); m.xTo = targetX; m.xFrom = object.x; m.yTo = targetY; m.yFrom = object.y; m.play(); } } ]]> </mx:Script> <mx:Button id="b1" label="A" x="10" y="10"/> <mx:Button id="b2" label="B" x="58" y="10"/> <mx:Button id="b3" label="C" x="106" y="10"/> <mx:Button id="b4" label="D" x="154" y="10"/> <mx:Button label="BUTTON" click="changeXY()" x="10" y="168"/> </mx:Application>
例子的具体效果,由于小弟刚刚来到Javaeye,还不懂怎么上传Flash,并且能预览,所以只能上传附件,给大家
点评一下了.
其实做布局转换时的动画效果,
最主要的就是去掉Application的布局设置
变为:absolute
然后自己制作作为的 LayoutManager ,也就是自己管理自己的布局
(当然管理的方式,就因人而异了)
大家可以参考Adobe官方的那个例子(右键可以看源码)
做好自己的布局管理之后,那么就是x、y坐标的问题了,
如果你算法好,想怎么变就怎么变了...
小弟希望大家多多点评...有什么问题尽量指出!