PuzzleSDK
UIListViewTest_Vertical类 参考

#include <UIListViewTest.h>

+ 类 UIListViewTest_Vertical 继承关系图:
+ UIListViewTest_Vertical 的协作图:

Public 成员函数

 CREATE_FUNC (UIListViewTest_Vertical)
 
 UIListViewTest_Vertical ()
 
 ~UIListViewTest_Vertical ()
 
virtual bool init () override
 
void selectedItemEvent (cocos2d::Ref *sender, cocos2d::ui::ListView::EventType type)
 
void selectedItemEventScrollView (cocos2d::Ref *sender, cocos2d::ui::ScrollView::EventType type)
 
virtual void update (float dt) override
 
- Public 成员函数 继承自 UIScene
 UIScene ()
 
 ~UIScene ()
 
virtual void onEnter () override
 
- Public 成员函数 继承自 TestCase
 TestCase ()
 
 ~TestCase ()
 
virtual std::string title () const
 
virtual std::string subtitle () const
 
virtual Type getTestType () const
 
virtual float getDuration () const
 
virtual std::string getExpectedOutput () const
 
virtual std::string getActualOutput () const
 
virtual void restartTestCallback (cocos2d::Ref *sender)
 
virtual void nextTestCallback (cocos2d::Ref *sender)
 
virtual void priorTestCallback (cocos2d::Ref *sender)
 
virtual void onBackCallback (cocos2d::Ref *sender)
 
void setTestSuite (TestSuite *testSuite)
 
TestSuitegetTestSuite () const
 
float getRunTime () const
 
void setTestCaseName (const std::string &name)
 
std::string getTestCaseName () const
 
const cocos2d::Label * getSubtitleLable () const
 
const cocos2d::MenuItemImage * getRestartTestItem () const
 

Protected 成员函数

float getItemPositionYInView (cocos2d::ui::Widget *item) const
 
void updateItem (int itemID, int templateID)
 

Protected 属性

cocos2d::ui::Text * _displayValueLabel = nullptr
 
int _spawnCount = 5
 
int _totalCount = 50
 
float _bufferZone = 45.f
 
float _itemTemplateHeight = 0.f
 
float _updateInterval = (1.0f / 24)
 
float _updateTimer = 0.f
 
float _lastContentPosY = 0.f
 
float _reuseItemOffset = 0.f
 
cocos2d::ui::ListView * _listView =nullptr
 
std::vector< std::string > _array
 
cocos2d::ui::Text * _indexLabels [3] = {nullptr}
 
- Protected 属性 继承自 UIScene
cocos2d::Layer * _uiLayer
 
cocos2d::ui::Layout * _widget
 
cocos2d::ui::Text * _sceneTitle
 
- Protected 属性 继承自 TestCase
cocos2d::MenuItemImage * _priorTestItem
 
cocos2d::MenuItemImage * _restartTestItem
 
cocos2d::MenuItemImage * _nextTestItem
 
cocos2d::Label * _titleLabel
 
cocos2d::Label * _subtitleLabel
 

额外继承的成员函数

- Public 类型 继承自 TestCase
enum class  Type { ROBUSTNESS , UNIT , GRAPHICAL_STATIC , MANUAL }
 
- Public 属性 继承自 TestCase
CC_CONSTRUCTOR_ACCESS __pad0__: virtual bool init() override
 

详细描述

在文件 UIListViewTest.h34 行定义.

构造及析构函数说明

◆ UIListViewTest_Vertical()

UIListViewTest_Vertical::UIListViewTest_Vertical ( )

在文件 UIListViewTest.cpp48 行定义.

49{
50}

◆ ~UIListViewTest_Vertical()

UIListViewTest_Vertical::~UIListViewTest_Vertical ( )

在文件 UIListViewTest.cpp52 行定义.

53{
54}

成员函数说明

◆ CREATE_FUNC()

UIListViewTest_Vertical::CREATE_FUNC ( UIListViewTest_Vertical  )

◆ getItemPositionYInView()

float UIListViewTest_Vertical::getItemPositionYInView ( cocos2d::ui::Widget *  item) const
protected

在文件 UIListViewTest.cpp199 行定义.

200{
201 auto worldPos = item->getParent()->convertToWorldSpaceAR(item->getPosition());
202 auto viewPos = this->_listView->convertToNodeSpaceAR(worldPos);
203 return viewPos.y;
204}
cocos2d::ui::ListView * _listView

引用了 _listView.

被这些函数引用 update().

+ 这是这个函数的调用关系图:

◆ init()

bool UIListViewTest_Vertical::init ( )
overridevirtual

重载 UIScene .

在文件 UIListViewTest.cpp56 行定义.

57{
58 if (UIScene::init())
59 {
60 Size widgetSize = _widget->getContentSize();
61
62 _displayValueLabel = Text::create("There are 50 items, but we only create 5 templates", "fonts/Marker Felt.ttf", 20);
63 _displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
64 _displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f,
65 widgetSize.height / 2.0f + _displayValueLabel->getContentSize().height * 1.5f + 30));
67
68
69 Text* alert = Text::create("ListView vertical", "fonts/Marker Felt.ttf", 30);
70 alert->setColor(Color3B(159, 168, 176));
71 alert->setPosition(Vec2(widgetSize.width / 2.0f,
72 widgetSize.height / 2.0f - alert->getContentSize().height * 3.075f));
73 _uiLayer->addChild(alert);
74
75 Layout* root = static_cast<Layout*>(_uiLayer->getChildByTag(81));
76
77 Layout* background = dynamic_cast<Layout*>(root->getChildByName("background_Panel"));
78 Size backgroundSize = background->getContentSize();
79
80
81 // create list view ex data
82
83 for (int i = 0; i < _totalCount; ++i)
84 {
85 std::string ccstr = StringUtils::format("listview_item_%d", i);
86 _array.push_back(ccstr);
87 }
88
89
90 // Create the list view ex
91 _listView = ListView::create();
92 // set list view ex direction
93 _listView->setDirection(ui::ScrollView::Direction::VERTICAL);
94 _listView->setBounceEnabled(true);
95 _listView->setBackGroundImage("cocosui/green_edit.png");
96 _listView->setGlobalZOrder(200);
97 _listView->setBackGroundImageScale9Enabled(true);
98 _listView->setContentSize(Size(240.0f, 130.0f));
99 _listView->setPosition(Vec2((widgetSize - _listView->getContentSize()) / 2.0f));
100 _listView->addEventListener((ui::ListView::ccListViewCallback)CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEvent, this));
101 _listView->addEventListener((ui::ListView::ccScrollViewCallback)CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEventScrollView,this));
102 _listView->setScrollBarPositionFromCorner(Vec2(7, 7));
103 _uiLayer->addChild(_listView);
104
105
106 // create model
107 Button* default_button = Button::create("cocosui/backtotoppressed.png", "cocosui/backtotopnormal.png");
108 default_button->setName("Title Button");
109
110 Layout* default_item = Layout::create();
111 default_item->setTouchEnabled(true);
112 default_item->setContentSize(default_button->getContentSize());
113 default_button->setPosition(Vec2(default_item->getContentSize() / 2.0f));
114 default_item->addChild(default_button);
115
116 auto clippingNode = ClippingNode::create();
117 auto sprite = Sprite::create("cocosui/clippingHead.jpg");
118 clippingNode->addChild(sprite);
119 auto stencil = Sprite::create("cocosui/clippingStencil.jpg");
120 clippingNode->setStencil(stencil);
121 auto custom_item_contentSize = default_item->getContentSize();
122 clippingNode->setPosition(sprite->getContentSize().width/2,
123 custom_item_contentSize.height/2);
124 clippingNode->setScale(0.5);
125 default_item->addChild(clippingNode);
126
127 // set model
128 _listView->setItemModel(default_item);
129
130 // set all items layout gravity
131 _listView->setGravity(ListView::Gravity::CENTER_VERTICAL);
132
133 //initial the data
134 for (int i = 0; i < _totalCount; ++i) {
135 if (i < _spawnCount) {
136 Widget* item = default_item->clone();
137 item->setTag(i);
138 Button* btn = (Button*)item->getChildByName("Title Button");
139 btn->setTitleText(_array.at(i));
140 _listView->pushBackCustomItem(item);
141 }
142 }
143
144 // set items margin
145 float spacing = 4;
146 _listView->setItemsMargin(spacing);
147 _itemTemplateHeight = default_item->getContentSize().height;
149
150 //update listview data
151 this->scheduleUpdate();
152
153 _listView->forceDoLayout();
154 float totalHeight = _itemTemplateHeight * _totalCount + (_totalCount - 1) * spacing;
155 _listView->setInnerContainerSize(Size(_listView->getInnerContainerSize().width, totalHeight));
156 _listView->jumpToTop();
157
158
159 // Show the indexes of items on each boundary.
160 {
161 float position = 75;
162 // Labels
163 _indexLabels[0] = Text::create(" ", "fonts/Marker Felt.ttf", 12);
164 _indexLabels[0]->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
165 _indexLabels[0]->setPosition(_uiLayer->getContentSize() / 2 + Size(0.0f, position));
166 _uiLayer->addChild(_indexLabels[0]);
167 _indexLabels[1] = Text::create(" ", "fonts/Marker Felt.ttf", 12);
168 _indexLabels[1]->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
169 _indexLabels[1]->setPosition(_uiLayer->getContentSize() / 2 + Size(140.0f, 0.0f));
170 _uiLayer->addChild(_indexLabels[1]);
171 _indexLabels[2] = Text::create(" ", "fonts/Marker Felt.ttf", 12);
172 _indexLabels[2]->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
173 _indexLabels[2]->setPosition(_uiLayer->getContentSize() / 2 + Size(0.0f, -position));
174 _uiLayer->addChild(_indexLabels[2]);
175
176 // Callback
177 _listView->ScrollView::addEventListener([this](Ref* ref, ScrollView::EventType eventType) {
178 ListView* listView = dynamic_cast<ListView*>(ref);
179 if(listView == nullptr || eventType != ScrollView::EventType::CONTAINER_MOVED)
180 {
181 return;
182 }
183 auto bottom = listView->getBottommostItemInCurrentView();
184 auto center = listView->getCenterItemInCurrentView();
185 auto top = listView->getTopmostItemInCurrentView();
186
187 _indexLabels[0]->setString(StringUtils::format("Top index=%zd", listView->getIndex(top)));
188 _indexLabels[1]->setString(StringUtils::format("Center\nindex=%zd", listView->getIndex(center)));
189 _indexLabels[2]->setString(StringUtils::format("Bottom index=%zd", listView->getIndex(bottom)));
190 });
191 }
192
193 return true;
194 }
195
196 return false;
197}
std::vector< std::string > _array
cocos2d::ui::Text * _displayValueLabel
void selectedItemEvent(cocos2d::Ref *sender, cocos2d::ui::ListView::EventType type)
cocos2d::ui::Text * _indexLabels[3]
void selectedItemEventScrollView(cocos2d::Ref *sender, cocos2d::ui::ScrollView::EventType type)
cocos2d::Layer * _uiLayer
Definition: UIScene.h:44
virtual bool init() override
Definition: UIScene.cpp:46
cocos2d::ui::Layout * _widget
Definition: UIScene.h:45

引用了 _array, _displayValueLabel, _indexLabels, _itemTemplateHeight, _listView, _reuseItemOffset, _spawnCount, _totalCount, UIScene::_uiLayer, UIScene::_widget, UIScene::init(), selectedItemEvent() , 以及 selectedItemEventScrollView().

+ 函数调用图:

◆ selectedItemEvent()

void UIListViewTest_Vertical::selectedItemEvent ( cocos2d::Ref *  sender,
cocos2d::ui::ListView::EventType  type 
)

在文件 UIListViewTest.cpp256 行定义.

257{
258 switch (type)
259 {
260 case cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_START:
261 {
262 ListView* listView = static_cast<ListView*>(pSender);
263 auto item = listView->getItem(listView->getCurSelectedIndex());
264 log("select child start index = %d", item->getTag());
265 break;
266 }
267 case cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_END:
268 {
269 ListView* listView = static_cast<ListView*>(pSender);
270 auto item = listView->getItem(listView->getCurSelectedIndex());
271 log("select child end index = %d", item->getTag());
272 break;
273 }
274 default:
275 break;
276 }
277}

被这些函数引用 init().

+ 这是这个函数的调用关系图:

◆ selectedItemEventScrollView()

void UIListViewTest_Vertical::selectedItemEventScrollView ( cocos2d::Ref *  sender,
cocos2d::ui::ScrollView::EventType  type 
)

在文件 UIListViewTest.cpp279 行定义.

280{
281 switch (type) {
282 case ui::ScrollView::EventType::SCROLL_TO_BOTTOM:
283 CCLOG("SCROLL_TO_BOTTOM");
284 break;
285 case ui::ScrollView::EventType::SCROLL_TO_TOP:
286 CCLOG("SCROLL_TO_TOP");
287 break;
288 default:
289 break;
290 }
291}

被这些函数引用 init().

+ 这是这个函数的调用关系图:

◆ update()

void UIListViewTest_Vertical::update ( float  dt)
overridevirtual

在文件 UIListViewTest.cpp215 行定义.

216{
217 this->_updateTimer += dt;
218 if (this->_updateTimer < this->_updateInterval) {
219 return;
220 }
221
222 float totalHeight = _itemTemplateHeight * _totalCount + (_totalCount - 1) * 4;
223
224 auto listViewHeight = _listView->getContentSize().height;
225
226 this->_updateTimer = 0;
227 auto isDown = this->_listView->getInnerContainerPosition().y < this->_lastContentPosY;
228 auto items = _listView->getItems();
229
230 for (int i = 0; i < _spawnCount && i < _totalCount; ++i) {
231 auto item = items.at(i);
232 auto itemPos = this->getItemPositionYInView(item);
233 if (isDown) {
234 if (itemPos < -_bufferZone && item->getPosition().y + _reuseItemOffset < totalHeight) {
235 int itemID = item->getTag() - (int)items.size();
236 item->setPositionY(item->getPositionY() + _reuseItemOffset);
237 CCLOG("itemPos = %f, itemID = %d, templateID = %d", itemPos, itemID, i);
238 this->updateItem(itemID, i);
239 }
240 }
241 else {
242 if (itemPos > _bufferZone + listViewHeight &&
243 item->getPosition().y - _reuseItemOffset >= 0) {
244
245 item->setPositionY(item->getPositionY() - _reuseItemOffset);
246 int itemID = item->getTag() + (int)items.size();
247 CCLOG("itemPos = %f, itemID = %d, templateID = %d", itemPos, itemID, i);
248 this->updateItem(itemID, i);
249 }
250 }
251 }
252 //update ListView Items
253 this->_lastContentPosY = this->_listView->getInnerContainer()->getPosition().y;
254}
float getItemPositionYInView(cocos2d::ui::Widget *item) const
void updateItem(int itemID, int templateID)

引用了 _bufferZone, _itemTemplateHeight, _lastContentPosY, _listView, _reuseItemOffset, _spawnCount, _totalCount, _updateInterval, _updateTimer, getItemPositionYInView() , 以及 updateItem().

+ 函数调用图:

◆ updateItem()

void UIListViewTest_Vertical::updateItem ( int  itemID,
int  templateID 
)
protected

在文件 UIListViewTest.cpp206 行定义.

207{
208 auto itemTemplate = _listView->getItems().at(templateID);
209 Button* btn = (Button*)itemTemplate->getChildByName("Title Button");
210 //If you have the item ID and templateID, you could fill in the data here
211 itemTemplate->setTag(itemID);
212 btn->setTitleText(_array.at(itemID));
213}

引用了 _array , 以及 _listView.

被这些函数引用 update().

+ 这是这个函数的调用关系图:

类成员变量说明

◆ _array

std::vector<std::string> UIListViewTest_Vertical::_array
protected

在文件 UIListViewTest.h68 行定义.

被这些函数引用 init() , 以及 updateItem().

◆ _bufferZone

float UIListViewTest_Vertical::_bufferZone = 45.f
protected

在文件 UIListViewTest.h59 行定义.

被这些函数引用 update().

◆ _displayValueLabel

cocos2d::ui::Text* UIListViewTest_Vertical::_displayValueLabel = nullptr
protected

在文件 UIListViewTest.h51 行定义.

被这些函数引用 init().

◆ _indexLabels

cocos2d::ui::Text* UIListViewTest_Vertical::_indexLabels[3] = {nullptr}
protected

在文件 UIListViewTest.h69 行定义.

被这些函数引用 init().

◆ _itemTemplateHeight

float UIListViewTest_Vertical::_itemTemplateHeight = 0.f
protected

在文件 UIListViewTest.h60 行定义.

被这些函数引用 init() , 以及 update().

◆ _lastContentPosY

float UIListViewTest_Vertical::_lastContentPosY = 0.f
protected

在文件 UIListViewTest.h65 行定义.

被这些函数引用 update().

◆ _listView

cocos2d::ui::ListView* UIListViewTest_Vertical::_listView =nullptr
protected

在文件 UIListViewTest.h67 行定义.

被这些函数引用 getItemPositionYInView(), init(), update() , 以及 updateItem().

◆ _reuseItemOffset

float UIListViewTest_Vertical::_reuseItemOffset = 0.f
protected

在文件 UIListViewTest.h66 行定义.

被这些函数引用 init() , 以及 update().

◆ _spawnCount

int UIListViewTest_Vertical::_spawnCount = 5
protected

在文件 UIListViewTest.h54 行定义.

被这些函数引用 init() , 以及 update().

◆ _totalCount

int UIListViewTest_Vertical::_totalCount = 50
protected

在文件 UIListViewTest.h56 行定义.

被这些函数引用 init() , 以及 update().

◆ _updateInterval

float UIListViewTest_Vertical::_updateInterval = (1.0f / 24)
protected

在文件 UIListViewTest.h62 行定义.

被这些函数引用 update().

◆ _updateTimer

float UIListViewTest_Vertical::_updateTimer = 0.f
protected

在文件 UIListViewTest.h63 行定义.

被这些函数引用 update().


该类的文档由以下文件生成: