UGUI自定義GridView 流式布局

2021-09-24 12:51:27 字數 1404 閱讀 4325

unity中對子物體的排序我們一般是使用gridlayoutgroup這個元件,但是這個元件會強行將子物體的width和height設定為相同的,但是如果遇到子物體的寬高不同的需求時,這個gridlayoutgroup將不再適用。此時需要我們自定義的編寫一套排序子物體的演算法(分為子view寬度一致,高度不一致或者高度一致,寬度不一致兩種情況)。

本文排序子物體採用了設定本地座標的做法,為了方便,將父物體content的中心點和itemprefab的中心點設定在了左上角(也就是當子物體的本地座標為vector3.zero時剛好在content的左上角)。

排序第一行這種情況時因為寬度是確定的,所以列表的列數也是固定的(列表的總寬度也是可以確定下來(padding.left + (width + spacing.x) * column)),那麼對於第一排的位置是很好排的:也就是vector2 pos = new vector2(padding.left + (width + spacing.x) * index, padding.top), index為第一行的索引 。

排序其他行由於item的高度不一致導致除了第一排之後的並不是很好排,但此時由於第一排已經排好,位置是已知的,那麼可以用dictionary儲存當前最後一行的每列的image,由此可以根據當前最後一行的每列的image確定下一行對應該列的image的position:也就是vector2 pos = new vector2(aboveimg.recttransform.localposition.x, aboveimg.recttransform.localposition.y - aboveimg.recttransform.sizedelta.y - spacing.y)。

content的大小由於content的大小需要在排序完成之後才獲取到,所以這裡採取了兩次排序的做法,第一次排序的目的僅僅是獲取content大小並設定(可在dictionary中的取y座標最小的即可),此時再排序一次即可。

item的y軸這種情況時由於item的高度一致,所以此時可以根據當前行數和item的高度確定y  也就是:-(padding.top + (height + spacing.y) * curraw)  。

item的x軸由於item的寬度不一致,所以導致x軸並不是很好排,但排好第乙個後可根據第乙個的寬度和列表的總寬度(如果超過總寬度需要換行)來確定下乙個item的x軸  以此類推即可排好,換行的時候需要將當前下乙個item的x軸置零。

content的大小與1.的情況相同,需第一次進行排序獲取行數才可得content大小,第一次排序的目的也僅僅是獲取content大小並設定( (padding.top + (height + spacing.y) * curraw)), 此時再排序一次即可。

GridView自定義分頁

在 asp.net 2.0 種提供了 gridview 控制項。該控制項的分頁比較方便,可以通過在 visual studio net 2005 種簡單設定即可實現各種分頁功能。1.預設分頁方式 1 是否允許分頁 gridview 的allowpaging 屬性。2 每頁記錄數 gridview 的...

gridview 自定義分頁

總記錄數 private int totalcountrecord 每頁顯示的條數 private int pageitem 5 當前頁 private int currentpage 1 private string strurl string.empty protected void page ...

GridView自定義分頁

該控制項的分頁比較方便,可以通過在visual studio net 2005種簡單設定即可實現各種分頁功能。1.預設分頁方式 1 是否允許分頁 gridview的allowpaging屬性。2 每頁記錄數 gridview的 pagesize 3 分頁導航條形式 gridview的 pagerse...