Cocos2d-x 3.3Bate0 ExpandedListView

来源:互联网 发布:美国女键盘手走红网络 编辑:程序博客网 时间:2024/06/05 06:40

之前写的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,0,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,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,topLength,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,topLength,0,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,0,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 , void *item , 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, ui::Layout *adapter, void *item, DJTreeNodeInfo *treeNodeInfo){    if (treeNodeInfo->treeDepthLevel == 0) {        adapter->setBackGroundColor(Color3B(150, 100, 200));    }else if (treeNodeInfo->treeDepthLevel == 1)    {        adapter->setBackGroundColor(Color3B(100, 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 , void *item , 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 , int index , void *item){    DJDataObject* data = static_cast<DJDataObject*>(item);    if (item == nullptr) {        return data_vec.at( index );    }    return data->children.at( index );}


效果:














0 0
原创粉丝点击