cocos2d-x-2.0 ListView使用

来源:互联网 发布:nicelabel数据库 编辑:程序博客网 时间:2024/05/21 06:16

转载自Cocos2D开发网--Cocos2Dev.com

原文地址: http://www.cocos2dev.com/?p=256

我在上一篇文章中介绍了CCControlSlider、CCControlSwitch、CCControlColourPicker的用法,现在把listView也讲解一下。由于cocos2d-x没有给出例子,所以代码有点长。我都写了注释,应该很容易理解。


ListViewTestLayer.h头文件

////  ListViewTestLayer.h//  2dxDemo////  Created by Yanghui Liu on 12-6-26.//  Copyright (c) 2012年 BoyoJoy. All rights reserved.// #ifndef _dxDemo_ListViewTestLayer_h#define _dxDemo_ListViewTestLayer_h #include "cocos2d.h"#include "CCListView.h"#include <list.h>#include <string.h> USING_NS_CC;using namespace cocos2d::extension; class ListViewTestLayer : public CCLayer , public CCListViewDelegate {public:ListViewTestLayer();~ListViewTestLayer();virtual bool init();LAYER_NODE_FUNC(ListViewTestLayer);virtual void visit();public:// 继承自CCListViewDelegate所需要实现的方法virtual void CCListView_numberOfCells(CCListView *listView, CCListViewProtrolData *data);virtual void CCListView_cellForRow(CCListView *listView, CCListViewProtrolData *data);virtual void CCListView_didClickCellAtRow(CCListView *listView, CCListViewProtrolData *data);virtual void CCListView_didScrollToRow(CCListView *listView, CCListViewProtrolData *data); private://显示list的状态的一个lableCCLabelTTF *m_InfoLabel;private:// 存放的List数据std::list<std::string> *m_pDataList;CCListView *m_pListView;//是否刷新,即reloadbool m_bFresh;void initData();};#endif


cpp的实现:

////  ListViewTestLayer.cpp//  2dxDemo////  Created by Yanghui Liu on 12-6-26.//  Copyright (c) 2012年 BoyoJoy. All rights reserved.// #include "ListViewTestLayer.h"#include "CCListViewCell.h" ListViewTestLayer::ListViewTestLayer(){} ListViewTestLayer::~ListViewTestLayer(){} void ListViewTestLayer::initData(){m_bFresh = true;CCSize winSize = CCDirector::sharedDirector()->getWinSize();m_pDataList = new std::list<std::string>;for (int i=0; i<15; i++) {char info[20];sprintf(info, "My Cell %d", i);m_pDataList->push_back(info);}// 初始化控件ListViewCCListView *listView = CCListView::viewWithMode(CCListViewModeVertical);listView->setContentSize( CCSizeMake(winSize.width * .5, winSize.height));listView->setDelegate(this);listView->setPosition(CCPointZero);this->addChild(listView);m_pListView = listView;// 初始化控件Label,显示ListView信息m_InfoLabel = CCLabelTTF::labelWithString("Info", "", 32);m_InfoLabel->setPosition(ccp(winSize.width * .8, winSize.height *.1));this->addChild(m_InfoLabel);} //visit方法会在每一帧的时候调用,也可以自己注册schedulevoid ListViewTestLayer::visit(){CCLayer::visit();if (m_bFresh) {m_pListView->reload();m_bFresh = false;}} //返回行数void ListViewTestLayer::CCListView_numberOfCells(cocos2d::extension::CCListView *listView, cocos2d::extension::CCListViewProtrolData *data){data->nNumberOfRows = m_pDataList->size();} //构造每一个cellvoid ListViewTestLayer::CCListView_cellForRow(cocos2d::extension::CCListView *listView, cocos2d::extension::CCListViewProtrolData *data){CCSize listSize = m_pListView->getContentSize();CCSize cellSize = CCSizeMake(listSize.width, listSize.height / 5);CCListViewCell *cell = CCListViewCell::node();cell->setOpacity(0);cell->setContentSize(cellSize);//cell选中颜色cell->setSelectionColor(ccc4(0, 255, 0, 255));data->cell = cell;std::list<std::string>::iterator it = m_pDataList->begin();for (int i=0; i<data->nRow; ++i) {++it;}CCLabelTTF *cellLabel = CCLabelTTF::labelWithString(((std::string) *it).c_str(), "Arial", 32);cellLabel->setPosition(ccp(cellSize.width / 2, cellSize.height / 2));cell->addChild(cellLabel);} //cell被选中void ListViewTestLayer::CCListView_didClickCellAtRow(cocos2d::extension::CCListView *listView, cocos2d::extension::CCListViewProtrolData *data){char info[100];sprintf(info, "No. %d Row", data->nRow);m_InfoLabel->setString(info);} //listView在滑动中void ListViewTestLayer::CCListView_didScrollToRow(cocos2d::extension::CCListView *listView, cocos2d::extension::CCListViewProtrolData *data){m_InfoLabel->setString("Scrolling...");} bool ListViewTestLayer::init(){if (!CCLayer::init()) {return false;}initData();return true;} 


调用方法:

//list view

   ListViewTestLayer *listViewDemoLayer = ListViewTestLayer::node();

    addChild(listViewDemoLayer);




 

原创粉丝点击