Laya 實現帶有子選單的List

2022-06-24 15:57:10 字數 3320 閱讀 8891

@ixenos 2020-10-29 11:19:38

1.繼承修改了list

1/**

2* 改良list

3* 改良目標:單列列表,item不規則大小4*

5* @author ixenos 2020-10-27 14:40:00 6*

7*/8public

class clist extends

list919

20/**21

* 渲染乙個單元格。

22* @param cell 需要渲染的單元格物件。

23* @param index 單元格索引。

24*/

25 override protected function renderitem(cell:*, index:int):void

else cell.datasource =_array[index];

3334

if (!cachecontent)

38if

(haslistener(event.render)) event(event.render, [cell, index]);

39if

(renderhandler) renderhandler.runwith([cell, index]);

40 } else44}

4546/**

47* @private

48* 滾動條的event.change事件偵聽處理函式。

49*/

50 override protected function onscrollbarchange(e:event = null):void

else

7071

break;72

}73}74

}7576if (!cachecontent) else

if (index <_startindex)

9192

for (var i:int = 0; i < num; i++) else

102 pos = math.floor(cellindex / linex) *_cellsize;

103 _isvertical ? cell.y = pos : cell.x =pos;

104renderitem(cell, cellindex);

105}

106 _startindex =index;

107changeselectstatus();

108 } else

115}

116117

var r:rectangle =_content.scrollrect;

118if

(_isvertical) else

125 _content.scrollrect =r;

126}

127128

private

function _createitems(starty:int, numx:int, numy:int):void

else

148 _cells.length = 0;

149}

150151

for (var k:int = starty; k < numy; k++) else

158 cell.x = (_isvertical ? l : k) * cellwidth -box.x;

159 cell.y = (_isvertical ? k : l) * cellheight -box.y;

160 cell.name = "item" + (k * numx +l);

161box.addchild(cell);

162addcell(cell);

163}

164}

165}

166167

private

function

_getonecell():box

174return _cells[0];

175}

176177

private

function poscell(cell:box, cellindex:int):void

188189

private

function _binddata(cell:*, data:object):void

198}

199200/**

201* @private

202* 更改單元格的資訊。

203* @internal 在此銷毀、建立單元格,並設定單元格的位置等屬性。相當於此列表內容傳送改變時呼叫此函式。

204*/

205 override protected function changecells():void

238}

239}

240 }

2.業務偽**

1

private

function init():void27

8private

function ontogglecate(index:int):void

1516

private

function

getopennumbeforecuridx(curidx:int):int23}

24return

ret;25}

2627

private

function getlistcontentheight():number

33 ret -=lui.listcate.spacey;

34return

ret;35}

3637

private

function listcatepos(isvertical:boolean,cell:box, pos:number, index:int):number

else

4647

return

pos;48}

4950

private

function listcaterender(cell:stageselectitem, index:int):void

C 帶有歷史資訊的選單

1.將歷史資訊加入到ini檔案 2.每次load窗體時自動載入ini檔案中資訊到選單 3.新開啟的路徑記錄到ini檔案中 將開啟檔案路徑寫入ini檔案的實現 如下 private void 開啟toolstripmenuitem click object sender,eventargs e 讀取i...

最長上公升子串行LIS演算法實現

介紹一 lis longest increasing subsequence 最長上公升 不下降 子串行,有兩種演算法複雜度為o n logn 和o n 2 在上述演算法中,若使用樸素的順序查詢在d1.dlen查詢,由於共有o n 個元素需要計算,每次計算時的複雜度是o n 則整個演算法的時間複雜度...

最長上公升子串行的長度(LIS)

o nlogn 做法 貪心 二分 該想法是在o n 2 的動態規劃中進一步演化而來 p i 表示第i個元素,dp i 表示長度為i 1的lis結尾元素的最小值 利用貪心的思想,對於乙個上公升子串行,最後面的乙個元素越小,越有利於新增新的元素,這樣lis長度更長,所以我們要維護dp陣列,其表示的就是長...