5. 建立文档类 public class test extends Sprite { public function test() { LanguageManager.instance.load( " ui.lang " ); // 加载多语言 AssetManager.instance.loadResource( " asset.swf " ); // 加载资源 Queue.defaultQueue.addEventListener(OperationEvent.OPERATION_COMPLETE,loadCompleteHandler);// 监听资源加载完成事件 } private function loadCompleteHandler(event:OperationEvent): void { stage.addChild(new ToolTipSprite());// 加入提示框 addChild( new Panel ());// 显示 Panel 窗体 } }
6. Panel.as ( 效果 ) public class Panel extends GBuilderBase // 继承此类便有拥有全部特性 { public var titleText:GText; public var mc:GMovieClip; public var tabBar:GButton; public var upArrow:GButton; public var downArrow:GButton; public var nameText:GText; public var numText:GText; public function Panel() { super ( " asset.Panel " ); // 连接资源 tabBar.data = "A" ; nameText.text = "@name" ; numText.text = "A" ; mc.setLabel( null ,1); // 让动画只播放一次 } } 类名 asset.Panel 资源和类属性名称一一对应
7. Panel.as v2 ( 效果 ) public class Panel extends GBuilderBase { public var titleText:GText; public var mc:GMovieClip; public var tabBar:GButton; //public var upArrow:GButton; //public var downArrow:GButton; public var scrollBar :GHScrollBar; //public var nameText:GText; //public var numText:GText; public var render :GListBase; public function Panel() { super ( “asset.Panel” );// 仍然使用原来的资源 mc.setLabel( null ,1); // 让动画只播放一次 tabBar.data = "GhostCat" ; render.type = UIConst.HORIZONTAL; // 设置 List 方向 render.itemRender = Render ; // 设置 Render render.data = [ "G" , "H" , "O" , "S" , "T" , " " , "C" , "A" , "T" ]; scrollBar.setTarget(render,render.columnWidth * 2); // 指定滚动条 scrollBar.detra = render.columnWidth; // 指定滚动距离 new ZoomEffect( this , null ,0.1,1000,{ease:Elastic.easeIn}, true ).execute();// 展开效果 } } 这里直接定义父层元件,滚动条的两个按钮自动声明,而 render 则在 Render.as 中定义 设置列表的伸展方向,渲染器 ( 见下页,内容,设置滚动区域,滚动速度 最后加入一个从中间展开的效果
8. Render.as public class Render extends GBuilderBase { public var nameText:GText; public var numText:GText; public function Render(skin:*= null , replace:Boolean= true ) { super (skin, replace);// 保持默认值,皮肤由外部传入 } // 复写 data 的 set 方法来获得数据 public override function set data(v:*) : void { super .data = v; nameText.text = numText.text = v; this .toolTip = " 当前值: " + v; TextFieldUtil.autoFontSize(numText.textField); // 调整字号使得可以全部显示 } // 复写 selected 属性来设置选中效果 public override function set selected(v:Boolean) : void { super .selected = v; this .transform.colorTransform = v ? new ColorTransform(1,1,1,1,50,50,50) : new ColorTransform(); } }
9. 已经有基类,不能直接使用 GBuildBase? public class Render extends GButton { public var nameText:GText; public var numText:GText; public function Render(skin:*= null , replace:Boolean= true ) { super (skin, replace); UIBuilder.buildAll( this ); } public override function destory(): void { UIBuilder.destory( this ); super .destory(); } } public class Render extends GButton { public var nameText:GText; public var numText:GText; public function Render(skin:*= null , replace:Boolean= true ) { super (skin, replace); nameText = new GText( this .content[ "nameText" ]); numText = new GText( this .content[ "numText" ]); } public override function destory(): void { nameText.destory(); numText.destory(); super .destory(); } }
12. 是否打算这样去做? private var temp:Array; public function setData(v:Array): void { temp = v; tabBar.mouseEnabled = tabBar.mouseChildren = false ; TweenUtil.to( this .render,500,{y:300,ease:Circ.easeIn,onComplete:tween1CompleteHandler}); } private function tween1CompleteHandler(): void { this .render.data = temp; temp = null ; this .scrollBar.resetContent( true , false );// 重置滚动条 TweenUtil.to( this .render,500,{y:0,ease:Circ.easeOut,onComplete:tween2CompleteHandler}); } private function tween2CompleteHandler(): void { tabBar.mouseEnabled = tabBar.mouseChildren = true ; }
13. 另一种写法 public function setData( v :Array): void { var list:Array = [ new SetPropertyOper( this .tabBar,{mouseEnabled: false ,mouseChildren: false }), // 禁用鼠标 new TweenOper( this .render,500,{y:300,ease:Circ.easeIn}), // 隐藏列表 new SetPropertyOper( this .render,{data: v }), // 设置数据 new FunctionOper( this .scrollBar.resetContent,[true,false]), // 让滚动区域回到顶端 new TweenOper( this .render,500,{y:0,ease:Circ.easeOut}), // 显示列表 new SetPropertyOper( this .tabBar,{mouseEnabled: true ,mouseChildren: true }) // 恢复鼠标 ]; new Queue(list).execute(); // 队列执行 }
20. 一个简单的例子(设置发光提示点击某个对象,点击后继续执行) public class ClickOper extends Oper { public var target:Sprite; public function ClickOper(target:Sprite) { this .target = target; super (); } public override function execute(): void { this .target.addEventListener(MouseEvent.CLICK,result); this .target.filters = [ new GlowFilter(0xFFFFFF,1,16,16)] super .execute(); } public override function result(event:*= null ): void { this .target.removeEventListener(MouseEvent.CLICK,result); this .target.filters = []; super .result(event); } }
37. Panel.as v4 ( 效果 ) public class Panel extends GBuilderBase { public var tab1:ZoomButton; public var tab2:ZoomButton; public var tab3:ZoomButton; public var tabBar:GBase; public var render1:Panel; public var render2:Panel2; public var render3:Panel3; public var viewStack:GViewState; public var selectGroup:SelectGroup; public function Panel() { super ( "asset.SelectGroup" ); // 按钮条 selectGroup = new SelectGroup([ tab1,tab2,tab3 ], true ); selectGroup.addEventListener(Event.CHANGE, changeHandler ); selectGroup.selectedIndex = 0; // 设置切换过渡 viewStack.showFromRight = new TweenOper( null , 500, { x: -760, startAt:{x:0}, ease:Circ.easeInOut}, true ,1); viewStack.showFromLeft = new TweenOper( null , 500, { x:760, startAt:{x:0}, ease:Circ.easeInOut}, true ,1); viewStack.hideToRight = new TweenOper( null , 500, { x: -760 , ease:Circ.easeInOut}, false ,1); viewStack.hideToLeft = new TweenOper( null , 500, { x:760 , ease:Circ.easeInOut}, false ,1); } private function changeHandler (event:Event): void { viewStack.selectedIndex = selectGroup.selectedIndex; } } 其中 ZoomButton 类见下页
38. ZoomButton.as public class ZoomButton extends GButton { public function ZoomButton(skin:*= null , replace:Boolean = true , separateTextField:Boolean = false , textPadding:Padding = null ) { super (skin, replace, separateTextField, textPadding); this .delayCall = false ; // 取消延迟更新避免抖动 this .upState.oper = new TweenOper( this ,100,{scaleX:1.0,scaleY:1.0}, false , 1); this .overState.oper = new TweenOper( this ,100,{scaleX:1.4,scaleY:1.4}, false , 1); this .downState.oper = new TweenOper( this ,100,{scaleX:1.0,scaleY:1.0}, false , 1); this .selectedUpState.oper = this .selectedOverState.oper = this .selectedDownState.oper = new TweenOper( this ,100,{scaleX:1.4,scaleY:1.4}, false , 1); this .disabledState.oper = this .selectedDisabledState.oper = new TweenOper( this ,100,{scaleX:1.0,scaleY:1.0}, false , 1); } } 这个类直接继承于 GButton 并设置了一些效果的初始值,以实现缩放
47. 例:给刚才的例子加上布局功能 ( 效果 ) public var tab1:ZoomButton; public var tab2:ZoomButton; public var tab3:ZoomButton; public var tabBar:GHBox;// 将 tabBar 的类型更改为 GHBox public var render1:Panel; public var render2:Panel2; public var render3:Panel3; public var viewStack:GViewState; public var selectGroup:SelectGroup; public function Panel(skin:*= null , replace:Boolean= true ) { super ( "asset.SelectGroup" ); tabBar.linearLayout.delayCall = false ; // 取消延迟布局可减少运动时的抖动现象 tabBar.linearLayout.horizontalGap = 5; // 设置间距