Closed8
Optimized ScrollView Adapter
Document
Demo
雑感
デモのスクロールバーはぬるぬる動くし特に大量データに対するパフォーマンスはとてもよさそうだが、結構癖があり扱いが難しい
BasicListAdapter でシンプルなスクロールバーを作る
- GUI に沿って Canvas の Panel 上に OSA を作成
- スクロールしたいコンテンツの設定
今回はコンテンツが文字だけなので Text だけつけた Panel を Prefab にして TestOSA と同じ階層に置いておく。
このときスクリプトから変更したい要素の名前はメモっておく、今回の場合だと TitleText
作成した OSA(今回は TestOSA というオブジェクト名)の Item Prefab
には作成した TestPanelPrefab
を登録しておく
- スクリプトの変更
手順 1 の GUI での操作で自動生成されたスクリプト(今回だと BvasicListAdapter.cs)においてテキスト(とその色)を指定するようにスクリプトを変更する。
作成した Prefab の要素の名前は下記部分で使用するので注意
root.GetComponentAtPath("TitleText", out titleText);
他の主な変更点
protected override void UpdateViewsHolder(MyListItemViewsHolder newOrRecycled)
{
MyListItemModel model = Data[newOrRecycled.ItemIndex];
newOrRecycled.UpdateTitleByItemIndex(model);
}
protected override void OnItemIndexChangedDueInsertOrRemove(MyListItemViewsHolder shiftedViewsHolder, int oldIndex, bool wasInsert, int removeOrInsertIndex)
{
base.OnItemIndexChangedDueInsertOrRemove(shiftedViewsHolder, oldIndex, wasInsert, removeOrInsertIndex);
shiftedViewsHolder.UpdateTitleByItemIndex(Data[shiftedViewsHolder.ItemIndex]);
}
// 中略
public class MyListItemModel
{
public string title;
public Color color;
public MyListItemModel() { }
public MyListItemModel(string _title, Color _color)
{
title = _title;
color = _color;
}
}
public class MyListItemViewsHolder : BaseItemViewsHolder
{
public TextMeshProUGUI titleText;
public override void CollectViews()
{
base.CollectViews();
root.GetComponentAtPath("TitleText", out titleText);
}
public void UpdateTitleByItemIndex(MyListItemModel model)
{
titleText.text = model.title + " #" + ItemIndex;
}
}
- テスト
テスト用に一個だけ要素を追加する関数を BasicListAdapter.cs
に追加
public void AddItemAt(int index, MyListItemModel item)
{
Data.InsertOne(index, item);
}
適当なボタンを作成し、上記関数を呼ぶようにする。
public void OnClickAdd()
{
MyListItemModel myItem = new MyListItemModel("aaa " + addCount.ToString(), new Color(1, 1, 1, 1));
basicListAdapter.AddItemAt(0, myItem);
addCount++;
}
このスクラップは2023/07/12にクローズされました