Egret之Tabbar通用页签
发表于:2024-11-24 作者:热门IT资讯网编辑
编辑最后更新 2024年11月24日,目标 : 实现Tabbar也签的通用。一 : 美术资源的准备(自己做的 , 很挫 , 勿喷 )如下二 : 通用页签ItemRenderer的皮肤 如下三 :tabbar的测试UI皮肤 如下四 :Ite
目标 : 实现Tabbar也签的通用。
一 : 美术资源的准备(自己做的 , 很挫 , 勿喷 )如下
二 : 通用页签ItemRenderer的皮肤 如下
三 :tabbar的测试UI皮肤 如下
四 :ItemRenderer的实现
module common{ /** * 通用的页签CELL * @author Husz */ export class common_TabBarCell extends eui.ItemRenderer{ private img_yes : eui.Image = null; private img_no : eui.Image = null; private img_txt : eui.Image = null; public constructor(){ super(); this.skinName = "resource/common_skins/common_TabBarCell.exml"; } protected createChildren():void{ super.createChildren(); } protected dataChanged() : void{ let $dataModel : common_TabBarCell_Data = this.data; this.handlerBackGround( $dataModel ); this.handlerTxt( $dataModel ); } /** * 处理背景 * @param {common.common_TabBarCell_Data} $dataModel */ private handlerBackGround( $dataModel : common_TabBarCell_Data ) : void{ let $selected : boolean = $dataModel._selected; this.img_yes.visible = $selected; this.img_no.visible = !$selected; } /** * 处理文本 * @param {common.common_TabBarCell_Data} $dataModel */ private handlerTxt( $dataModel : common_TabBarCell_Data ) : void{ let $textPathRes : string = ""; if($dataModel._selected == true){ $textPathRes = $dataModel._yes_txt_res; }else{ $textPathRes = $dataModel._no_txt_res; } this.img_txt.source = RES.getRes($textPathRes); } /** * 是否已经处于选择的状态(只读。。。。。。) * @returns {boolean} * @constructor */ public get IsSelected() : boolean{ let $dataModel : common_TabBarCell_Data = this.data; return $dataModel._selected; } } /** * 通用的页签CELL的数据模型 * @author Husz */ export interface common_TabBarCell_Data{ /**数据的下标*/ _index : number; /**是否处于选择状态*/ _selected : boolean; /**选择状态下的美术文本资源*/ _yes_txt_res : string; /**未选择状态下的美术文本资源*/ _no_txt_res : string; }}
五 : TabBarDemoView UIDemo实现
module app{ import common_TabBarCell = common.common_TabBarCell; import common_TabBarCell_Data = common.common_TabBarCell_Data; /** * 此UI面板测试通用的Tabbar页签Cell * @author Husz */ export class TabBarDemoView extends eui.Component implements eui.UIComponent{ private bar_target : eui.TabBar = null; private con_0 : eui.Group = null; private con_1 : eui.Group = null; private _data2TabBar_arr : Array = null; private _cur_index2TabBar : number = 0; private _all_channel : Array = null; public constructor(){ super(); this.skinName = "resource/eui_skins/TabBarDemoSkin.exml"; } protected childrenCreated():void{ super.childrenCreated(); this._all_channel = [ this.con_0, this.con_1 ]; this.handlerListener2Tabber( true ); this.initView2Tabbar(); } private handlerListener2Tabber( $isAdd : boolean ) : void{ if( $isAdd ){ if( !this.bar_target.hasEventListener(eui.ItemTapEvent.ITEM_TAP) ) this.bar_target.addEventListener( eui.ItemTapEvent.ITEM_TAP , this.onTabbarItemClick , this ); }else{ if( this.bar_target.hasEventListener(eui.ItemTapEvent.ITEM_TAP) ) this.bar_target.removeEventListener( eui.ItemTapEvent.ITEM_TAP , this.onTabbarItemClick , this ); } } /** * 处理页签切换 * @param {eui.ItemTapEvent} $e */ private onTabbarItemClick( $e : eui.ItemTapEvent ) : void{ if( this._cur_index2TabBar != $e.itemIndex ){ this._cur_index2TabBar = $e.itemIndex; let $dataCell : common_TabBarCell_Data = null; let $count : number = 0; for( let $i : number = 0 , $j :number = this._data2TabBar_arr.length ; $i < $j ; $i ++ ){ $dataCell = this._data2TabBar_arr[$i]; if( $dataCell._index == this._cur_index2TabBar ){ $dataCell._selected = true; $count ++; }else{ if( $dataCell._selected != false ){ $dataCell._selected = false; $count ++; } } if($count >= 2){ break; } } //切换频道 this.channelChange(); this.bar_target.dataProvider = new eui.ArrayCollection( this._data2TabBar_arr ); } } /** * 初始化页签数据 */ private initData2Tabbar() : void{ this._data2TabBar_arr = [ { _index : 0, _selected : true, _yes_txt_res : "A_1_png", _no_txt_res : "A_0_png" }, { _index : 1, _selected : false, _yes_txt_res : "B_1_png", _no_txt_res : "B_0_png" } ]; this._cur_index2TabBar = 0; } /** * 初始化页签 */ private initView2Tabbar() : void{ this.initData2Tabbar(); this.bar_target.itemRenderer = common_TabBarCell; this.bar_target.dataProvider = new eui.ArrayCollection( this._data2TabBar_arr ); this.channelChange(); } /** * 频道切换(显隐) */ private channelChange() : void{ let $cell : eui.Group = null; for( let $i : number = 0 , $j : number = this._all_channel.length ; $i < $j ; $i ++ ){ $cell = this._all_channel[$i]; $cell.visible = $i == this._cur_index2TabBar; } } /** * 销毁 */ public destory() : void{ this.handlerListener2Tabber(false); } }}
六 : 效果
2.0版优化 - 对eui.ArrayCollection 数据进行更新也可以实行页签的状态切换
module app{ import common_TabBarCell = common.common_TabBarCell; import common_TabBarCell_Data = common.common_TabBarCell_Data; /** * 此UI面板测试通用的Tabbar页签Cell * @author Husz */ export class TabBarDemoView extends eui.Component implements eui.UIComponent{ private bar_target : eui.TabBar = null; private con_0 : eui.Group = null; private con_1 : eui.Group = null; private _data2TabBar_arr : Array = null; private _cur_index2TabBar : number = 0; private _all_channel : Array = null; private _arrayCollection : eui.ArrayCollection = null; public constructor(){ super(); this.skinName = "resource/eui_skins/TabBarDemoSkin.exml"; } protected childrenCreated():void{ super.childrenCreated(); this._all_channel = [ this.con_0, this.con_1 ]; this.handlerListener2Tabber( true ); this.initView2Tabbar(); } private handlerListener2Tabber( $isAdd : boolean ) : void{ if( $isAdd ){ if( !this.bar_target.hasEventListener(eui.ItemTapEvent.ITEM_TAP) ) this.bar_target.addEventListener( eui.ItemTapEvent.ITEM_TAP , this.onTabbarItemClick , this ); }else{ if( this.bar_target.hasEventListener(eui.ItemTapEvent.ITEM_TAP) ) this.bar_target.removeEventListener( eui.ItemTapEvent.ITEM_TAP , this.onTabbarItemClick , this ); } } /** * 处理页签切换 * @param {eui.ItemTapEvent} $e */ private onTabbarItemClick( $e : eui.ItemTapEvent ) : void{ if( this._cur_index2TabBar != $e.itemIndex ){ this._cur_index2TabBar = $e.itemIndex; let $dataCell : common_TabBarCell_Data = null; let $count : number = 0; for( let $i : number = 0 , $j :number = this._data2TabBar_arr.length ; $i < $j ; $i ++ ){ $dataCell = this._data2TabBar_arr[$i]; if( $dataCell._index == this._cur_index2TabBar ){ $dataCell._selected = true; this._arrayCollection.replaceItemAt( $dataCell , $i ); $count ++; }else{ if( $dataCell._selected != false ){ $dataCell._selected = false; this._arrayCollection.replaceItemAt( $dataCell , $i ); $count ++; } } if($count >= 2){ break; } } //切换频道 this.channelChange(); // this.bar_target.dataProvider = new eui.ArrayCollection( this._data2TabBar_arr ); } } /** * 初始化页签数据 */ private initData2Tabbar() : void{ this._data2TabBar_arr = [ { _index : 0, _selected : true, _yes_txt_res : "A_1_png", _no_txt_res : "A_0_png" }, { _index : 1, _selected : false, _yes_txt_res : "B_1_png", _no_txt_res : "B_0_png" } ]; this._arrayCollection = new eui.ArrayCollection( this._data2TabBar_arr ); this._cur_index2TabBar = 0; } /** * 初始化页签 */ private initView2Tabbar() : void{ this.initData2Tabbar(); this.bar_target.itemRenderer = common_TabBarCell; this.bar_target.dataProvider = this._arrayCollection; this.channelChange(); } /** * 频道切换(显隐) */ private channelChange() : void{ let $cell : eui.Group = null; for( let $i : number = 0 , $j : number = this._all_channel.length ; $i < $j ; $i ++ ){ $cell = this._all_channel[$i]; $cell.visible = $i == this._cur_index2TabBar; } } /** * 销毁 */ public destory() : void{ this.handlerListener2Tabber(false); } }}