bool UIListViewTest_Vertical::init() { if (UIScene::init()) { Size widgetSize = _widget->getContentSize(); _displayValueLabel = Text::create("Move by vertical direction", "fonts/Marker Felt.ttf", 32); _displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f)); _displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f + _displayValueLabel->getContentSize().height * 1.5f)); _uiLayer->addChild(_displayValueLabel); Text* alert = Text::create("ListView vertical", "fonts/Marker Felt.ttf", 30); alert->setColor(Color3B(159, 168, 176)); alert->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f - alert->getContentSize().height * 3.075f)); _uiLayer->addChild(alert); Layout* root = static_cast<Layout*>(_uiLayer->getChildByTag(81)); Layout* background = dynamic_cast<Layout*>(root->getChildByName("background_Panel")); Size backgroundSize = background->getContentSize(); // create list view ex data for (int i = 0; i < 20; ++i) { std::string ccstr = StringUtils::format("listview_item_%d", i); _array.push_back(ccstr); } // Create the list view ex ListView* listView = ListView::create(); // set list view ex direction listView->setDirection(ui::ScrollView::Direction::VERTICAL); listView->setBounceEnabled(true); listView->setBackGroundImage("cocosui/green_edit.png"); listView->setBackGroundImageScale9Enabled(true); listView->setContentSize(Size(240, 130)); listView->setPosition(Vec2((widgetSize.width - backgroundSize.width) / 2.0f + (backgroundSize.width - listView->getContentSize().width) / 2.0f, (widgetSize.height - backgroundSize.height) / 2.0f + (backgroundSize.height - listView->getContentSize().height) / 2.0f)); listView->addEventListener((ui::ListView::ccListViewCallback)CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEvent, this)); listView->addEventListener((ui::ListView::ccScrollViewCallback)CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEventScrollView,this)); _uiLayer->addChild(listView); // create model Button* default_button = Button::create("cocosui/backtotoppressed.png", "cocosui/backtotopnormal.png"); default_button->setName("Title Button"); Layout* default_item = Layout::create(); default_item->setTouchEnabled(true); default_item->setContentSize(default_button->getContentSize()); default_button->setPosition(Vec2(default_item->getContentSize().width / 2.0f, default_item->getContentSize().height / 2.0f)); default_item->addChild(default_button); // set model listView->setItemModel(default_item); // add default item ssize_t count = _array.size(); for (int i = 0; i < count / 4; ++i) { listView->pushBackDefaultItem(); } // insert default item for (int i = 0; i < count / 4; ++i) { listView->insertDefaultItem(0); } listView->removeAllChildren(); Sprite* testSprite = Sprite::create("cocosui/backtotoppressed.png"); testSprite->setPosition(Vec2(200,200)); listView->addChild(testSprite); // add custom item for (int i = 0; i < count / 4; ++i) { Button* custom_button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png"); custom_button->setName("Title Button"); custom_button->setScale9Enabled(true); custom_button->setContentSize(default_button->getContentSize()); Layout *custom_item = Layout::create(); custom_item->setContentSize(custom_button->getContentSize()); custom_button->setPosition(Vec2(custom_item->getContentSize().width / 2.0f, custom_item->getContentSize().height / 2.0f)); custom_item->addChild(custom_button); listView->addChild(custom_item); } // insert custom item Vector<Widget*>& items = listView->getItems(); ssize_t items_count = items.size(); for (int i = 0; i < count / 4; ++i) { Button* custom_button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png"); custom_button->setName("Title Button"); custom_button->setScale9Enabled(true); custom_button->setContentSize(default_button->getContentSize()); Layout *custom_item = Layout::create(); custom_item->setContentSize(custom_button->getContentSize()); custom_button->setPosition(Vec2(custom_item->getContentSize().width / 2.0f, custom_item->getContentSize().height / 2.0f)); custom_item->addChild(custom_button); custom_item->setTag(1); listView->insertCustomItem(custom_item, items_count); } // set item data items_count = items.size(); for (int i = 0; i < items_count; ++i) { Widget* item = listView->getItem(i); Button* button = static_cast<Button*>(item->getChildByName("Title Button")); ssize_t index = listView->getIndex(item); button->setTitleText(_array[index]); } // remove last item listView->removeChildByTag(1); // remove item by index items_count = items.size(); listView->removeItem(items_count - 1); // set all items layout gravity listView->setGravity(ListView::Gravity::CENTER_VERTICAL); // set items margin listView->setItemsMargin(2.0f); return true; } return false; }
bool UIListViewTest_Vertical::init() { if (UIScene::init()) { Size widgetSize = _widget->getContentSize(); _displayValueLabel = Text::create("Move by vertical direction", "fonts/Marker Felt.ttf", 32); _displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f)); _displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f + _displayValueLabel->getContentSize().height * 1.5f)); _uiLayer->addChild(_displayValueLabel); Text* alert = Text::create("ListView vertical", "fonts/Marker Felt.ttf", 30); alert->setColor(Color3B(159, 168, 176)); alert->setPosition(Vec2(widgetSize.width / 2.0f, widgetSize.height / 2.0f - alert->getContentSize().height * 3.075f)); _uiLayer->addChild(alert); Layout* root = static_cast<Layout*>(_uiLayer->getChildByTag(81)); Layout* background = dynamic_cast<Layout*>(root->getChildByName("background_Panel")); Size backgroundSize = background->getContentSize(); // create list view ex data for (int i = 0; i < 20; ++i) { std::string ccstr = StringUtils::format("listview_item_%d", i); _array.push_back(ccstr); } // Create the list view ex ListView* listView = ListView::create(); // set list view ex direction listView->setDirection(ui::ScrollView::Direction::VERTICAL); listView->setBounceEnabled(true); listView->setBackGroundImage("cocosui/green_edit.png"); listView->setBackGroundImageScale9Enabled(true); listView->setContentSize(Size(240, 130)); listView->setPosition(Vec2((widgetSize - listView->getContentSize()) / 2.0f)); listView->addEventListener((ui::ListView::ccListViewCallback)CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEvent, this)); listView->addEventListener((ui::ListView::ccScrollViewCallback)CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEventScrollView,this)); listView->setScrollBarPositionFromCorner(Vec2(7, 7)); _uiLayer->addChild(listView); // create model Button* default_button = Button::create("cocosui/backtotoppressed.png", "cocosui/backtotopnormal.png"); default_button->setName("Title Button"); Layout* default_item = Layout::create(); default_item->setTouchEnabled(true); default_item->setContentSize(default_button->getContentSize()); default_button->setPosition(Vec2(default_item->getContentSize() / 2.0f)); default_item->addChild(default_button); // set model listView->setItemModel(default_item); // add default item ssize_t count = _array.size(); for (int i = 0; i < count / 4; ++i) { listView->pushBackDefaultItem(); } // insert default item for (int i = 0; i < count / 4; ++i) { listView->insertDefaultItem(0); } listView->removeAllChildren(); Sprite* testSprite = Sprite::create("cocosui/backtotoppressed.png"); testSprite->setPosition(Vec2(200,200)); listView->addChild(testSprite); // add custom item for (int i = 0; i < count / 4; ++i) { Button* custom_button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png"); custom_button->setName("Title Button"); custom_button->setScale9Enabled(true); custom_button->setContentSize(default_button->getContentSize()); Layout *custom_item = Layout::create(); custom_item->setContentSize(custom_button->getContentSize()); custom_button->setPosition(Vec2(custom_item->getContentSize().width / 2.0f, custom_item->getContentSize().height / 2.0f)); custom_item->addChild(custom_button); listView->addChild(custom_item); } // insert custom item Vector<Widget*>& items = listView->getItems(); ssize_t items_count = items.size(); for (int i = 0; i < count / 4; ++i) { Button* custom_button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png"); custom_button->setName("Title Button"); custom_button->setScale9Enabled(true); custom_button->setContentSize(default_button->getContentSize()); Layout *custom_item = Layout::create(); custom_item->setContentSize(custom_button->getContentSize()); custom_button->setPosition(Vec2(custom_item->getContentSize().width / 2.0f, custom_item->getContentSize().height / 2.0f)); custom_item->addChild(custom_button); custom_item->setTag(1); listView->insertCustomItem(custom_item, items_count); } // set item data items_count = items.size(); for (int i = 0; i < items_count; ++i) { Widget* item = listView->getItem(i); Button* button = static_cast<Button*>(item->getChildByName("Title Button")); ssize_t index = listView->getIndex(item); button->setTitleText(_array[index]); } // remove last item listView->removeChildByTag(1); // remove item by index items_count = items.size(); listView->removeItem(items_count - 1); // set all items layout gravity listView->setGravity(ListView::Gravity::CENTER_VERTICAL); // set items margin listView->setItemsMargin(2.0f); // Show the indexes of items on each boundary. { float position = 75; // Labels _indexLabels[0] = Text::create(" ", "fonts/Marker Felt.ttf", 12); _indexLabels[0]->setAnchorPoint(Vec2::ANCHOR_MIDDLE); _indexLabels[0]->setPosition(_uiLayer->getContentSize() / 2 + Size(0, position)); _uiLayer->addChild(_indexLabels[0]); _indexLabels[1] = Text::create(" ", "fonts/Marker Felt.ttf", 12); _indexLabels[1]->setAnchorPoint(Vec2::ANCHOR_MIDDLE); _indexLabels[1]->setPosition(_uiLayer->getContentSize() / 2 + Size(140, 0)); _uiLayer->addChild(_indexLabels[1]); _indexLabels[2] = Text::create(" ", "fonts/Marker Felt.ttf", 12); _indexLabels[2]->setAnchorPoint(Vec2::ANCHOR_MIDDLE); _indexLabels[2]->setPosition(_uiLayer->getContentSize() / 2 + Size(0, -position)); _uiLayer->addChild(_indexLabels[2]); // Callback listView->ScrollView::addEventListener([this](Ref* ref, ScrollView::EventType eventType) { ListView* listView = dynamic_cast<ListView*>(ref); if(listView == nullptr || eventType != ScrollView::EventType::CONTAINER_MOVED) { return; } auto bottom = listView->getBottommostItemInCurrentView(); auto center = listView->getCenterItemInCurrentView(); auto top = listView->getTopmostItemInCurrentView(); _indexLabels[0]->setString(StringUtils::format("Top index=%zd", listView->getIndex(top))); _indexLabels[1]->setString(StringUtils::format("Center\nindex=%zd", listView->getIndex(center))); _indexLabels[2]->setString(StringUtils::format("Bottom index=%zd", listView->getIndex(bottom))); }); } return true; } return false; }
void MainScene2::refresh_listview() { //listview ListView * answerlist = static_cast<ListView*>(rootNode->getChildByName("ListView")); answerlist->removeAllChildren(); if (searchState == "N")//当在查看某个用户的回答时,不显示问题 { //问题详情放入listview Node * question_and_contentNode = CSLoader::createNode("question_and_content.csb"); question_and_contentNode->setTag(0); //关注提问者按钮 Button * btn_focus2 = static_cast<Button*>(question_and_contentNode->getChildByName("Button_focus")); if (AppDelegate::this_user_is_focus == "1")//提问用户已经是“我”的关注对象了 { btn_focus2->setBright(false); btn_focus2->setEnabled(false); } else { btn_focus2->addClickEventListener(CC_CALLBACK_1(MainScene2::Add_focus_ClickCallback, this, -1)); } //提问者名字显示 Text * ask_user_name = static_cast<Text *>(question_and_contentNode->getChildByName("Text_user")); ask_user_name->setText(AppDelegate::this_question_username); //问题标题显示 Text * question_title = static_cast<Text *>(question_and_contentNode->getChildByName("Text_question_title")); question_title->setText(AppDelegate::this_question_title); //问题内容显示 Text * question_content = static_cast<Text *>(question_and_contentNode->getChildByName("Text_question_content")); question_content->setText(this_question_content); Widget * question_and_contentWidget = Widget::create(); question_and_contentWidget->setSize(Size(620, 380)); question_and_contentWidget->addChild(question_and_contentNode); answerlist->pushBackCustomItem(question_and_contentWidget); } //回答列表放入listview for (int i = 0; i < this_page_answer_num; i++) { Node * answerNode = CSLoader::createNode("answer.csb"); answerNode->setTag(0); Text * userText = static_cast<Text*>(answerNode->getChildByName("Text_user")); userText->setText(name[i]); //回答者的关注按钮 Button * focusBtn = static_cast<Button*>(answerNode->getChildByName("Button_focus")); if (is_focus[i]=="1")//回答这个问题的用户已经是“我”的关注对象了 { focusBtn->setBright(false); focusBtn->setEnabled(false); } else { focusBtn->addClickEventListener(CC_CALLBACK_1(MainScene2::Add_focus_ClickCallback, this, i)); } //回答的内容 Text * answerText = static_cast<Text*>(answerNode->getChildByName("Text_answer")); answerText->setText(A_content[i]); Text * timeText = static_cast<Text*>(answerNode->getChildByName("Text_time"));//时间 timeText->setText(A_createtime[i]); //赞的次数显示 Text * praiseText = static_cast<Text*>(answerNode->getChildByName("Text_praise_num"));; praiseText->setText(A_praisenum[i]); //点赞按钮 Button * praiseBtn = static_cast<Button*>(answerNode->getChildByName("Button_praise")); if (is_praise[i]=="1")//我已经赞过 { praiseBtn->setBright(false); praiseBtn->setEnabled(false); } else { praiseBtn->addClickEventListener(CC_CALLBACK_1(MainScene2::Praise_button_ClickCallback, this, i)); } Widget * answerWidget = Widget::create(); answerWidget->setSize(Size(620, 170)); answerWidget->addChild(answerNode);//Node放入Widget中 answerlist->pushBackCustomItem(answerWidget);//Widget放入listview } if (searchState == "N")//当查看某个用户的答案时,不能回答 { //回答问题模块 Node * my_answer_Node = CSLoader::createNode("my_answer.csb"); my_answer_Node->setTag(0); Button * btn_up_answer = static_cast<Button*>(my_answer_Node->getChildByName("Button_up_answer")); btn_up_answer->addClickEventListener(CC_CALLBACK_1(MainScene2::Up_answer_ClickCallback, this)); TextField * answer_content_TF = static_cast<TextField *>(my_answer_Node->getChildByName("TextField_answer")); answer_content_TF->ignoreContentAdaptWithSize(false);//设置换行 Widget * my_answer_Widget = Widget::create(); my_answer_Widget->setSize(Size(620, 290)); my_answer_Widget->addChild(my_answer_Node);//Node放入Widget中 answerlist->pushBackCustomItem(my_answer_Widget);//Widget放入listview } }
//itemVect 物品 与数量 direction 左:true 右: false void HoldBuildUI::ShowItemList(vector<pair<int, int>>* itemVect, bool direction) { auto layout_Template = m_RootWidget->getChildByName<Layout*>("Layout_Template"); auto layout_Center = m_RootWidget->getChildByName<Layout*>("Layout_Center"); auto Layout_BtnItem = layout_Template->getChildByName<Layout*>("Layout_BtnItem"); ListView* lview; if (direction) { lview = layout_Center->getChildByName<ListView*>("LView_Bag"); }else { lview = layout_Center->getChildByName<ListView*>("LView_DropOut"); } lview->removeAllChildren(); for (auto iter = itemVect->begin(); iter != itemVect->end(); iter++) { auto itemId = iter->first; auto itemNum = iter->second; auto layout_BtnItem = Layout_BtnItem->clone(); auto btn_Item = layout_BtnItem->getChildByName<Button*>("Btn_Item"); btn_Item->addClickEventListener([this, direction, itemId](Ref* sender) { if (direction) { // 不占据背包空间物品不能丢弃 if (CfgDataRow(itemId).GetValue(CfgField::NonSpace)->asInt() == 0) { return; } auto iter = m_BagItem->begin(); while (iter != m_BagItem->end()) { if(iter->first == itemId) { break; } iter++; } if (iter != m_BagItem->end()) { iter->second -= 1; if(iter->second == 0) { m_BagItem->erase(iter); } iter = m_DropItem->begin(); while (iter != m_DropItem->end()) { if(iter->first == itemId) { break; } iter++; } if(iter == m_DropItem->end()) { m_DropItem->push_back(pair<int, int>( itemId, 1)); }else { iter->second += 1; } } }else { //判断是否金币 if (itemId == (int)CfgIdEnum::GoldId) { SaveGold(); }else { auto iter = m_DropItem->begin(); while (iter != m_DropItem->end()) { if(iter->first == itemId) { break; } iter++; } if (iter != m_DropItem->end()) { if (IsSaveBag(itemId)) { iter->second -= 1; if(iter->second == 0) { m_DropItem->erase(iter); } } } } } ShowItemList(m_BagItem, true); ShowItemList(m_DropItem, false); }); auto text_Name = layout_BtnItem->getChildByName<Text*>("Text_ItemName"); CfgDataRow dataRow(itemId); auto langId = dataRow.GetValue(CfgField::Name)->asInt(); auto langText = MultiLanguage::getInstance()->GetText(langId); text_Name->setString(langText); auto text_Num = layout_BtnItem->getChildByName<Text*>("Text_ItemNum"); text_Num->setString(StringUtils::format("x%d", itemNum)); lview->addChild(layout_BtnItem); UpdateBagItemNum(); } }