之前写的ExpandedListView版本由于版本升级这里提供Cocos2d-x 3.3Bate0 版本
代码下载:http://download.csdn.net/detail/qqmcy/8033343
下面介绍下如何使用。
先介绍下
DJDataObject存放数据模型的类
DayReportListAdapter 自定义的adapter或是iOS中的cell
ListViewTest 示例类。
下面上代码啦
DJDataObject.h
- //
- // DJDataObject.h
- // testthirdone
- //
- // Created by 杜甲 on 14-6-7.
- //
- //
- #ifndef __testthirdone__DJDataObject__
- #define __testthirdone__DJDataObject__
- #include "cocos2d.h"
- USING_NS_CC;
- class DJDataObject :public Ref
- {
- public:
- CREATE_FUNC(DJDataObject);
- virtual bool init();
- std::string name;
- std::vector<DJDataObject*> children;
- void initWithNameAndChildren(std::string name,std::vector<DJDataObject*> data_vec);
- };
- #endif /* defined(__testthirdone__DJDataObject__) */
DJDataObject.cpp
- //
- // DJDataObject.cpp
- // testthirdone
- //
- // Created by 杜甲 on 14-6-7.
- //
- //
- #include "DJDataObject.h"
- bool DJDataObject::init()
- {
- bool bRet = false;
- do {
- bRet = true;
- } while (0);
- return bRet;
- }
- void DJDataObject::initWithNameAndChildren(std::string name,std::vector<DJDataObject*> data_vec)
- {
- this->name = name;
- this->children = data_vec;
- }
DayReportListAdapter.h
- //
- // DayReportListAdapter.h
- //
- //
- // Created by 杜甲 on 14-6-4.
- //
- //
- #ifndef __ht_mobile_cpp__DayReportListAdapter__
- #define __ht_mobile_cpp__DayReportListAdapter__
- #include "cocos2d.h"
- #include "ui/CocosGUI.h"
- #include "DJTreeNodeInfo.h"
- USING_NS_CC;
- class DayReportListAdapter :public ui::Layout
- {
- public:
- CREATE_FUNC(DayReportListAdapter);
- virtual bool init();
- ui::Text* organName;
- ui::Text* prem_day;
- ui::Text* prem_month;
- ui::ImageView* in_Image;
- void setBackGround(int treeDepthLevel);
- Vec2 preVec2;
- float preOffsetX;
- typedef std::function<void(Ref*,Vec2 offset_vec2)> ccAdapterCallback;
- void addEventListener(const ccAdapterCallback& callback);
- ccAdapterCallback _eventCallback;
- bool isMoving_HORIZONTAL;
- Size winSize;
- };
- #endif /* defined(__ht_mobile_cpp__DayReportListAdapter__) */
DayReportListAdapter.cpp
- //
- // DayReportListAdapter.cpp
- //
- //
- // Created by 杜甲 on 14-6-4.
- //
- //
- #include "DayReportListAdapter.h"
- #include "VisibleRect.h"
- bool DayReportListAdapter::init()
- {
- bool bRet = false;
- do {
- CC_BREAK_IF(!ui::Layout::init());
- setLayoutType(cocos2d::ui::Layout::Type::RELATIVE);
- setBackGroundColorType(ui::Layout::BackGroundColorType::SOLID);
- winSize = Director::getInstance()->getWinSize();
- setTouchEnabled(true);
- float topLength = 30;
- in_Image = ui::ImageView::create("CloseNormal.png");
- in_Image->setScale(VisibleRect::getImageScale());
- in_Image->setTouchEnabled(true);
- addChild(in_Image);
- auto rp_image = ui::RelativeLayoutParameter::create();
- rp_image->setRelativeName("rp_image");
- float offset = -in_Image->getContentSize().width * 2/3 *(1- VisibleRect::getImageScale());
- rp_image->setMargin(ui::Margin(-in_Image->getContentSize().width * 2/3 *(1- VisibleRect::getImageScale()),0));
- rp_image->setAlign(cocos2d::ui::RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_CENTER_VERTICAL);
- in_Image->setLayoutParameter(rp_image);
- organName = ui::Text::create();
- organName->setFontSize(38 * VisibleRect::getImageScale());
- organName->setColor(Color3B::BLACK);
- addChild(organName);
- auto rp_organName = ui::RelativeLayoutParameter::create();
- rp_organName->setRelativeName("rp_organName");
- rp_organName->setRelativeToWidgetName("rp_image");
- rp_organName->setMargin(ui::Margin(1 * VisibleRect::getImageScale() + offset,topLength,0));
- rp_organName->setAlign(cocos2d::ui::RelativeLayoutParameter::RelativeAlign::LOCATION_RIGHT_OF_CENTER);
- organName->setLayoutParameter(rp_organName);
- prem_month = ui::Text::create();
- prem_month->setFontSize(38 * VisibleRect::getImageScale());
- prem_month->setTextHorizontalAlignment(cocos2d::TextHAlignment::LEFT);
- prem_month->setColor(Color3B::BLACK);
- addChild(prem_month);
- auto rp_prem_month = ui::RelativeLayoutParameter::create();
- rp_prem_month->setAlign(cocos2d::ui::RelativeLayoutParameter::RelativeAlign::PARENT_TOP_RIGHT);
- rp_prem_month->setRelativeName("rp_prem_month");
- rp_prem_month->setMargin(ui::Margin(0,50*VisibleRect::getImageScale(),0));
- prem_month->setLayoutParameter(rp_prem_month);
- auto center = ui::Layout::create();
- center->setSize(Size(1,1));
- addChild(center);
- auto rp_center = ui::RelativeLayoutParameter::create();
- rp_center->setRelativeName("rp_center");
- rp_center->setAlign(cocos2d::ui::RelativeLayoutParameter::RelativeAlign::CENTER_IN_PARENT);
- center->setLayoutParameter(rp_center);
- prem_day = ui::Text::create();
- prem_day->setTextHorizontalAlignment(cocos2d::TextHAlignment::LEFT);
- prem_day->setFontSize(38 * VisibleRect::getImageScale());
- prem_day->setAnchorPoint(Vec2::ANCHOR_MIDDLE_LEFT);
- prem_day->setSize(Size(100,50));
- prem_day->setColor(Color3B::BLACK);
- addChild(prem_day);
- auto rp_prem_day = ui::RelativeLayoutParameter::create();
- rp_prem_day->setRelativeToWidgetName("rp_center");
- rp_prem_day->setAlign(cocos2d::ui::RelativeLayoutParameter::RelativeAlign::PARENT_TOP_CENTER_HORIZONTAL);
- // rp_prem_day->setRelativeToWidgetName("rp_prem_month");
- rp_prem_day->setMargin(ui::Margin(30,0));
- prem_day->setLayoutParameter(rp_prem_day);
- auto bottom_color = ui::Layout::create();
- bottom_color->setSize(Size(winSize.width,1));
- bottom_color->setBackGroundColorType(ui::Layout::BackGroundColorType::SOLID);
- bottom_color->setBackGroundColor(Color3B::BLACK);
- addChild(bottom_color);
- auto rp_bottom_color = ui::RelativeLayoutParameter::create();
- rp_bottom_color->setAlign(cocos2d::ui::RelativeLayoutParameter::RelativeAlign::PARENT_BOTTOM_CENTER_HORIZONTAL);
- rp_bottom_color->setMargin(ui::Margin(0,1));
- bottom_color->setLayoutParameter(rp_bottom_color);
- bRet = true;
- } while (0);
- return bRet;
- }
- void DayReportListAdapter::setBackGround(int treeDepthLevel)
- {
- log("treeDepthLevel = %d",treeDepthLevel);
- switch (treeDepthLevel) {
- case 0:
- setBackGroundColor(Color3B(209,238,252));
- break;
- case 1:
- setBackGroundColor(Color3B(224,248,216));
- break;
- case 2:
- break;
- default:
- break;
- }
- }
- void DayReportListAdapter::addEventListener(const ccAdapterCallback &callback)
- {
- _eventCallback = callback;
- }
ListViewTest.h
- //
- // ListViewTest.h
- // testthirdone
- //
- // Created by 杜甲 on 14-6-9.
- //
- //
- /*
- * 示例Demo
- */
- #ifndef __testthirdone__ListViewTest__
- #define __testthirdone__ListViewTest__
- #include "cocos2d.h"
- #include "ui/CocosGUI.h"
- #include "DJDataObject.h"
- #include "DJListView.h"
- USING_NS_CC;
- using namespace ui;
- class ListViewTest : public ui::Layout,public DJListViewDataSource,public DJListViewDelegate
- {
- public:
- CREATE_FUNC(ListViewTest);
- virtual bool init();
- private:
- std::vector<DJDataObject*> data_vec;
- virtual ssize_t treeViewNumberOfChildrenOfItem(DJListView *treeView,void *item) ;
- virtual ui::Layout *treeViewAndCellForItemAndTreeNodeInfo(DJListView *treeView,void *item,DJTreeNodeInfo *treeNodeInfo);
- virtual void* treeViewAndChildOfItem(DJListView *treeView,int index,void *item);
- Size winSize;
- virtual void treeViewWillDisplayCellForItemTreeNodeInfo(DJListView *treeView,ui::Layout *adapter,DJTreeNodeInfo *treeNodeInfo) ;
- };
- #endif /* defined(__testthirdone__ListViewTest__) */
ListViewTest.cpp
- //
- // ListViewTest.cpp
- // testthirdone
- //
- // Created by 杜甲 on 14-6-9.
- //
- //
- #include "ListViewTest.h"
- #include "DJTreeNode.h"
- #include "DJTreeNodeInfo.h"
- #include "DayReportListAdapter.h"
- bool ListViewTest::init()
- {
- bool bRet = false;
- do {
- CC_BREAK_IF(!ui::Layout::init());
- winSize = Director::getInstance()->getWinSize();
- setBackGroundColorType(ui::Layout::BackGroundColorType::SOLID);
- setBackGroundColor(Color3B(18,23,222));
- std::vector<DJDataObject*>temp1;
- std::vector<DJDataObject*>temp2;
- std::vector<DJDataObject*>temp3;
- std::vector<DJDataObject*>temp4;
- DJDataObject* data7 = DJDataObject::create();
- data7->retain();
- //initWithNameAndChildren 参数1:当前数据内容, 参数2 :子集
- data7->initWithNameAndChildren("数据1-1-1",temp4);
- temp1.push_back(data7);
- DJDataObject* data3 = DJDataObject::create();
- data3->retain();
- data3->initWithNameAndChildren("数据1-1",temp1);
- DJDataObject* data4 = DJDataObject::create();
- data4->retain();
- data4->initWithNameAndChildren("数据1-2",temp4);
- for (int i = 0; i < 7; i++)
- {
- DJDataObject* data6 = DJDataObject::create();
- data6->retain();
- data6->initWithNameAndChildren("数据h",temp3);
- temp2.push_back(data6);
- }
- DJDataObject* data1 = DJDataObject::create();
- data1->retain();
- data1->initWithNameAndChildren("数据r",temp2);
- DJDataObject* data = DJDataObject::create();
- data->retain();
- std::vector<DJDataObject*>temp;
- temp.push_back(data3);
- temp.push_back(data4);
- data->initWithNameAndChildren("数据12",temp);
- data_vec.push_back(data);
- data_vec.push_back(data1);
- auto winSize = Director::getInstance()->getWinSize();
- auto listView1 = DJListView::create();
- listView1->setDJListViewDataSource(this);
- listView1->setDJListViewDelegate(this);
- listView1->setSize(winSize);
- listView1->addExpandedListView(data_vec);
- addChild(listView1);
- bRet = true;
- } while (0);
- return bRet;
- }
- void ListViewTest::treeViewWillDisplayCellForItemTreeNodeInfo(DJListView *treeView,DJTreeNodeInfo *treeNodeInfo)
- {
- if (treeNodeInfo->treeDepthLevel == 0) {
- adapter->setBackGroundColor(Color3B(150,100,200));
- }else if (treeNodeInfo->treeDepthLevel == 1)
- {
- adapter->setBackGroundColor(Color3B(100,100));
- }else if (treeNodeInfo->treeDepthLevel == 2)
- {
- adapter->setBackGroundColor(Color3B(100,150,150));
- }
- }
- ssize_t ListViewTest::treeViewNumberOfChildrenOfItem(DJListView *treeView,void *item)
- {
- if (item == nullptr) {
- return data_vec.size();
- }
- DJDataObject* data = static_cast<DJDataObject*>(item);
- return data->children.size();
- }
- ui::Layout* ListViewTest::treeViewAndCellForItemAndTreeNodeInfo(DJListView *treeView,DJTreeNodeInfo *treeNodeInfo)
- {
- DJDataObject* dobject = static_cast<DJDataObject*>(item) ;
- auto tableLayout1 = DayReportListAdapter::create();
- tableLayout1->setSize(Size(winSize.width,100));
- tableLayout1->setBackGroundColorType(ui::Layout::BackGroundColorType::SOLID);
- // tableLayout1->setBackGround(treeNodeInfo->treeDepthLevel);
- // tableLayout1->setBackGroundColor(Color3B(189,203,222));
- // listView->pushBackCustomItem(tableLayout1);
- tableLayout1->organName->setString(dobject->name);
- tableLayout1->prem_day->setString(StringUtils::format("%d",333));
- tableLayout1->prem_month->setString("fffff");
- return tableLayout1;
- }
- void* ListViewTest::treeViewAndChildOfItem(DJListView *treeView,void *item)
- {
- DJDataObject* data = static_cast<DJDataObject*>(item);
- if (item == nullptr) {
- return data_vec.at( index );
- }
- return data->children.at( index );
- }
效果: