ui::ListView
はui::ScrollView
を継承して作られています。
ui::Widget
単位でリストにいい感じで並べてくれるので、かなり使いやすいです。
Cocos2d-x2.x時代に使っていたTableViewに比べるとやることがほとんどなくて、とても楽でした。
CocosStudio側の作業
ListViewを配置したベースのLayoutとListViewに表示するパーツを用意します。
UIEditorを使います。
ListViewを配置したベースとなるLayoutを作成
変数名とか雑になってますが、単純にリストコンテナを配置するだけです。
細かい設定でよく使いそうなのは以下で行えます。
- 縦リストにする場合:
スライド方向
にVertical
を指定する - 横リストにする場合:
スライド方向
にHorizontal
を指定する - スクロールの最後でバウンドさせる場合:
リバウンドオープン
のチェックボスをONにする
横リスト
縦リスト
縦リストのリバウンドON
ListViewに表示するパーツの作成
キャンバスサイズを250x50
に調整して、LabelとButtonを配置しました。
特別な設定は特に無いです。
Cocos2d-x側の作業
CocosStudioでExportしたファイルの取り込みと、ソースコード上でListViewへWidgetを配置します。
ファイルの取り込み
詳しくは、以前書いた記事「CocoStudioのAnimationEditorを使って簡単なアニメーションを実装する」に書いているのでそちらを御覧ください。
ListViewにパーツを配置する
bool HelloWorld::init()
{
// 〜省略〜
// CocosStudioのLayout読み込み
auto layout = GUIReader::getInstance()->widgetFromJsonFile("ListScene/ListScene.json");
// Listを取得
auto listView = layout->getChildByName<ui::ListView*>("ListView_2");
// Listの中身をセット
for (int i = 0; i < 10; i++) {
auto listParts = GUIReader::getInstance()->widgetFromJsonFile("ListParts/ListParts.json");
auto text = StringUtils::format("Label Text %d", i);
listParts->getChildByName<ui::Text*>("Label_2")->setString(text);
listView->pushBackCustomItem(listParts);
}
this->addChild(layout);
return true;
}
ソースコードはこちらに公開していますので、興味があればご覧ください。
追記:
上記の配置したリストの選択行を取得する方法については、「ui::ListViewのリスト内で選択した行を取得する」をご覧ください。