亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

利用Layer優化Group顯示

系統 2064 0

每天逛逛TWaver論壇已經成為一種習慣,今天看到一個非常有意思的帖子: http://twaver.servasoft.com/forum/viewtopic.php?f=14&t=3129

當兩個Group重疊時,Group中的Node會始終顯示在兩個Group之上,呈現結果如下圖(引用了帖子中的圖片):

利用Layer優化Group顯示

這簡直是無法忍受的,如果把這樣的呈現效果拿給客戶看,不被罵死才怪。我們要的是這種效果(引用了帖子中的圖片):

利用Layer優化Group顯示

帖子中給出的解決方案是:為每個Group生成一個layer,當選中Group中,將對應的layer置頂。想法很美好,現實卻很殘酷:帖子最后給出的代碼雖然可以部分實現這種效果,但是在我看來仍然不夠完美,甚至說有瑕疵。大家可以把代碼copy下來,然后運行測試:先將所有的Group展開,然后點擊group1,再點擊group2_2并拖動與group1重合,你看到了什么?

group2_2雖然被置頂,但是它的parent:group2卻仍然被group1和group1_1遮擋了。這是因為帖子中的解決方案只是處理了當前點擊Group自身和的child Group(將child Group置頂),卻沒有處理parent Group,所以group2_2的parent:group2仍然顯示在后面。下圖是測試的結果(group1是group1_1的parent;group2是group2_2的parent;group1和group2是平級,同是group_root1的children):

利用Layer優化Group顯示

可以很明顯地看到,group2_2確實被置頂了,但是group2卻仍然被遮擋,理想的狀況下,當我們點擊group2_2的時候,group2應該緊緊跟隨在group2_2下面,并遮擋group1和group1_1,效果如下圖:

利用Layer優化Group顯示

這樣就好看多了,當我們拖動group2_2的時候,group2應該僅僅跟隨在group2_2下邊,并且遮擋住group1和group1_1。

我把帖子中的代碼改造了一下,最終實現了這種效果,獨樂樂不如眾樂樂,下面我把我的實現代碼貼到此博客上與大家分享,如果有錯誤或可以優化的地方希望大家可以批評指正,感激不盡!

我們仍然沿用帖子中的設計思路:為每個Group生成一個layer,點擊Group時將layer置頂,但是我們還要考慮Group的parent Group和child Group:將child Group置頂,parent Group緊隨其后。首先Group可以嵌套多層,而且我們也不確定可能會嵌套幾層,所以遞歸是不可避免的了。對于這種比較復雜的算法,直觀的代碼遠遠要比語言描述有力的多,直接貼上代碼:

    private function init():void {
				this.initBox();
				network.elementBox = box;
				network.addInteractionListener(function(e:InteractionEvent):void {
					if(e.kind == InteractionEvent.CLICK_ELEMENT){
						var g:Group = null;
						if(e.element is Group){
							g = Group(e.element);
						}else if(e.element.parent is Group){
							g = Group(e.element.parent);
						}

						var ele:Element=e.element as Element;
						var rootGroup:Group=g;
						var parentArr:ArrayCollection=new ArrayCollection;
						parentArr.addItem(g);
						while(ele.parent){
							if(ele.parent is Group){
								rootGroup=ele.parent as Group;
								parentArr.addItem(rootGroup);
							}
							ele=ele.parent as Element;
						}
						iterator(rootGroup,parentArr);
					}
				});
			}
private function iterator(parentGroup:Group,parentArr:ArrayCollection):void{
				var nextParentGroup:Group=null;
				var layer:Layer = box.layerBox.getLayerByID(parentGroup.id) as Layer;
				if(layer){
					box.layerBox.moveToBottom(layer);
				}
				for(var i=0;i<parentGroup.children.count;i++){
					var ele:Element=parentGroup.getChildAt(i) as Element;
					if(ele is Group){
						var g:Group=Group(ele);
						if(parentArr.contains(g)){
							nextParentGroup=g;
							continue;
						}
						var layer:Layer = box.layerBox.getLayerByID(g.id) as Layer;
						if(layer){
							box.layerBox.moveToBottom(layer);
						}
						iterator(Group(ele),parentArr);
					}
				}
				if(nextParentGroup)
					iterator(nextParentGroup,parentArr);
			}
  

盡管語言乏力,但是為了方便大家理解,我還是盡力描述一下:

當我點擊一個Group的時候,獲取這個Group的根Group,稱之為rootGroup,將rootGroup傳入iterator方法遞歸遍歷,把所有的Group置頂一遍,但是越是靠后置頂的,就越靠前顯示。所以為了讓我們點擊的Group能夠靠前顯示,我們需要先遍歷無關Group(例子中的group1和group1_1),最后再遍歷group2和group2_2(其中group2_2要最后遍歷)。這個遍歷先后順序怎么控制呢,通過這段代碼來控制:

    if(parentArr.contains(g)){
	nextParentGroup=g;
	continue;
}
  

parentArr集合里包含了我們點擊的Group的所有的parent Group,我們判斷如果當前遍歷到的group在parentArr集合中,就跳過循環,直到for結束后再遍歷它。這是大致的思路,我覺得這些描述+代碼應該可以讓大家理解,不知道這樣頻繁的置頂對效率有沒有影響,希望大家能提出優化方案。最后附上完整的代碼 demo(見原文最下方)

利用Layer優化Group顯示


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品亚洲综合色拍 | 久久精品亚洲日本筱田优 | 美女被羞羞视频网站在线 | 性欧美video另类bd | 天天操天天干天天爽 | 99免费在线视频 | 国产操比 | 久久美女精品国产精品亚洲 | 黑人和黑人激情一级毛片 | 9999在线视频| 久久国产一区二区三区 | 97视频免费上传播放 | 狠狠色噜噜狠狠狠狠色综合网 | 伊人色视频 | 日韩欧美精品一区二区 | 亚洲色妞 | 不卡的毛片 | 天天操天天摸天天射 | 色综合伊人色综合网亚洲欧洲 | 色综合久久精品中文字幕首页 | 香蕉视频国产精品 | 五月婷婷精品 | 四虎影院免费观看视频 | 色吧色吧色吧网 | 综合欧美亚洲 | 日韩成人午夜 | 成人做爰毛片免费视频 | 国产a一级毛片午夜剧场14 | 日日摸夜夜添夜夜添一区二区 | 四虎精品国产一区二区三区 | 免费观看黄色的网站 | 女人18毛片a级毛片免费视频 | 手机看片久久高清国产日韩 | 久久在精品线影院精品国产 | 国产精选在线播放 | 国产精品欧美亚洲 | 美女被羞羞视频网站在线 | 日韩一级欧美一级毛片在线 | 国产在线麻豆一区二区 | 久久综合给合久久狠狠狠色97 | 婷婷的久久五月综合先锋影音 |