cocos2dx tableview基础:实现多图片的滑动显示
2017-07-07 08:58
295 查看
通过tableview实现滑动显示26个字母图片,点击图片执行相应的动作。
tableview 需要继承TableViewDataSource(数据源),TableViewDelegate(触屏事件处理),同时实现其虚函数。
代码如下:
头文件TableViewTest.h如下:
#ifndef __macstudycocos2dx__TableViewTest__
#define __macstudycocos2dx__TableViewTest__
#include <stdio.h>
#include "cocos2d.h"
#include "extensions/cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;
//void runTableViewTest();
class TableViewTest:publiccocos2d::Layer,publiccocos2d::extension::TableViewDataSource,publiccocos2d::extension::TableViewDelegate
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
void toExtensionMainLayer(cocos2d::Ref *sender);
CREATE_FUNC(TableViewTest);
virtual void scrollViewDidScroll(cocos2d::extension::ScrollView* view){};
//重写滑动事件
virtual void scrollViewDidZoom(cocos2d::extension::ScrollView* view){};
//重写缩放事件
//以下重写TableViewDataSource的虚函数
virtualvoid tableCellTouched(cocos2d::extension::TableView* table,cocos2d::extension::TableViewCell* cell);
//定义单元触碰事件
virtual Size tableCellSizeForIndex(TableView *table,ssize_t idx);
//定义单元的大小
virtual TableViewCell* tableCellAtIndex(cocos2d::extension::TableView* table,ssize_t idx);
//定义单元格
virtual ssize_t numberOfCellsInTableView(cocos2d::extension::TableView* table);
//定义单元格数量
};
#endif /* defined(__macstudycocos2dx__TableViewTest__) */
TableViewTest.cpp如下:
#include "TableViewTest.h"
Scene* TableViewTest::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = TableViewTest::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
bool TableViewTest::init(){
if (!Layer::init()) {
return false;
}
Size winSize=Director::getInstance()->getWinSize();
TableView* tableView=TableView::create(this,Size(800,300));
tableView->setDirection(ScrollView::Direction::HORIZONTAL);
tableView->setPosition(Vec2(20,winSize.height/2-30));
tableView->setDelegate(this);
this->addChild(tableView);
tableView->reloadData();
return true;
}
void TableViewTest::tableCellTouched(cocos2d::extension::TableView* table,TableViewCell* cell){
log("cell touched at index:%ld",cell->getIdx());
}
SizeTableViewTest::tableCellSizeForIndex(cocos2d::extension::TableView* table,ssize_t idx){
return Size(300,150);
}
TableViewCell* TableViewTest::tableCellAtIndex(cocos2d::extension::TableView* table,ssize_t idx){
auto letindex=idx+1;
auto string=String::createWithFormat("let%ld.png",letindex);
TableViewCell *cell=table->cellAtIndex(idx);
if (!cell) {
cell=newTableViewCell();
cell->autorelease();
auto sprite=Sprite::create(string->getCString());
sprite->setAnchorPoint(Vec2::ZERO);
sprite->setPosition(Vec2(0,0));
cell->addChild(sprite);
auto label=Label::createWithSystemFont(string->getCString(),"arial", 30);
label->setPosition(Vec2::ZERO);
label->setAnchorPoint(Vec2::ZERO);
label->setTag(123);
cell->addChild(label);
}
else{
auto label=(Label*)cell->getChildByTag(123);
label->setString(string->getCString());
}
return cell;
}
ssize_tTableViewTest::numberOfCellsInTableView(cocos2d::extension::TableView *table){
return 26;
}
最好实现的效果如下:
tableview 需要继承TableViewDataSource(数据源),TableViewDelegate(触屏事件处理),同时实现其虚函数。
代码如下:
头文件TableViewTest.h如下:
#ifndef __macstudycocos2dx__TableViewTest__
#define __macstudycocos2dx__TableViewTest__
#include <stdio.h>
#include "cocos2d.h"
#include "extensions/cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;
//void runTableViewTest();
class TableViewTest:publiccocos2d::Layer,publiccocos2d::extension::TableViewDataSource,publiccocos2d::extension::TableViewDelegate
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
void toExtensionMainLayer(cocos2d::Ref *sender);
CREATE_FUNC(TableViewTest);
virtual void scrollViewDidScroll(cocos2d::extension::ScrollView* view){};
//重写滑动事件
virtual void scrollViewDidZoom(cocos2d::extension::ScrollView* view){};
//重写缩放事件
//以下重写TableViewDataSource的虚函数
virtualvoid tableCellTouched(cocos2d::extension::TableView* table,cocos2d::extension::TableViewCell* cell);
//定义单元触碰事件
virtual Size tableCellSizeForIndex(TableView *table,ssize_t idx);
//定义单元的大小
virtual TableViewCell* tableCellAtIndex(cocos2d::extension::TableView* table,ssize_t idx);
//定义单元格
virtual ssize_t numberOfCellsInTableView(cocos2d::extension::TableView* table);
//定义单元格数量
};
#endif /* defined(__macstudycocos2dx__TableViewTest__) */
TableViewTest.cpp如下:
#include "TableViewTest.h"
Scene* TableViewTest::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = TableViewTest::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
bool TableViewTest::init(){
if (!Layer::init()) {
return false;
}
Size winSize=Director::getInstance()->getWinSize();
TableView* tableView=TableView::create(this,Size(800,300));
tableView->setDirection(ScrollView::Direction::HORIZONTAL);
tableView->setPosition(Vec2(20,winSize.height/2-30));
tableView->setDelegate(this);
this->addChild(tableView);
tableView->reloadData();
return true;
}
void TableViewTest::tableCellTouched(cocos2d::extension::TableView* table,TableViewCell* cell){
log("cell touched at index:%ld",cell->getIdx());
}
SizeTableViewTest::tableCellSizeForIndex(cocos2d::extension::TableView* table,ssize_t idx){
return Size(300,150);
}
TableViewCell* TableViewTest::tableCellAtIndex(cocos2d::extension::TableView* table,ssize_t idx){
auto letindex=idx+1;
auto string=String::createWithFormat("let%ld.png",letindex);
TableViewCell *cell=table->cellAtIndex(idx);
if (!cell) {
cell=newTableViewCell();
cell->autorelease();
auto sprite=Sprite::create(string->getCString());
sprite->setAnchorPoint(Vec2::ZERO);
sprite->setPosition(Vec2(0,0));
cell->addChild(sprite);
auto label=Label::createWithSystemFont(string->getCString(),"arial", 30);
label->setPosition(Vec2::ZERO);
label->setAnchorPoint(Vec2::ZERO);
label->setTag(123);
cell->addChild(label);
}
else{
auto label=(Label*)cell->getChildByTag(123);
label->setString(string->getCString());
}
return cell;
}
ssize_tTableViewTest::numberOfCellsInTableView(cocos2d::extension::TableView *table){
return 26;
}
最好实现的效果如下:
![](http://fs.gimoo.net/img/2015/06/25/122350_558b8256981de.jpg)
相关文章推荐
- cocos2dx tableview基础:实现多图片的滑动显示
- 安卓自定义View——PictureGuide一款不错的图片导航,可实现图片显示滑动到哪一张
- Android 使用ViewPager实现左右循环滑动图片和显示当前页码
- qt利用委托:QStyledItemDelegate,实现tableview 的表格项的自定义显示,如插入图片,绘制控件
- 滑动tableView表单时cell图片的视差效果实现分析
- 自定义view——实现换行显示图片
- UIScrollView+UIPageControl+NSTimer实现图片的自动滑动以及用户可手动切换,UIPageControl可点击
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- 使用viewpager嵌套实现上下左右滑动切换图片(IOS双向滚动翻页效果相同)
- IOS之tableview 实现动态加载图片
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- 用Gallery和ImageView实现图片滑动
- 使用ViewPager实现左右循环滑动图片
- 使用GridView和ImageView组件实现图片显示效果
- jQuery实现点击缩略图显示大图片并带有左右滑动
- ViewFilpper、Gesture 实现图片左右滑动切换
- Android HorizonScrollView实现图片左右滑动
- 使用GridView和ImageView组件实现图片显示
- 使用ViewFlipper实现图片左右滑动效果