cocos2d-C++ 学习UI控件(四)之 Slider|ListView
2016-04-27 11:12
561 查看
今天介绍一下滑动条Slider和列表视图ListView,Slider不难,大家稍微看一下应该就OK了,ListView绝对是一个坑,这个花了我不少时间研究,在介绍ListView的时候我会跟大家说一下注意点,也是我在学习的时候碰到的问题。
先介绍一下Slider吧
--------------------------------------------------------------------------Slider
效果图
上面是我调好的代码,现在说说可能会遇到的坑
1.一开始我往ListView中加的是Sprite,结果点击ListView中项目事件,怎么都不会发生,并且getItems().size()的值是0。后来换了button就好了,其他的大家在用的时候可以试试,我这边就不试了;
2.如果你直接把button加到ListView中会发现,你调整不了位置,button之间是紧挨着的。所以我每次先在往ListView中加一个Layout,接着把button加到Layout上,这里就可以调整位置了。如下图:
3.这个不知道是bug还是什么,反正我现在还不清楚原因:
listview->setDirection(ListView::Direction::BOTH); //不知道为什么这里只有设置NONE或者BOTH,是可以滑动的
如果我设置HORIZONTAL或者VERTICAL,你会发现不能滑动,Scrollview中是正常的;
******常用的基础容器快讲完了,等介绍完剩下的常用UI控件。我试着用做一个游戏,会用到这些容器,练习一下(时间待定,主要毕业设计都还没做完,毕不了业就惨了*_*)
先介绍一下Slider吧
--------------------------------------------------------------------------Slider
void HelloWorld::addSlider() { Slider* slider = Slider::create(); slider->loadBarTexture("sliderProgress.png"); //设置滑动条背景 slider->loadSlidBallTextureNormal("sliderThumb.png"); //设置滑块图片 slider->setPosition(Vec2(300, 300)); slider->addEventListener(CC_CALLBACK_2(HelloWorld::SliderEvent,this)); //监听滑动事件 this->addChild(slider); } void HelloWorld::SliderEvent(Ref * pSender, Slider::EventType type) { if (type == Slider::EventType::ON_PERCENTAGE_CHANGED) //进度条的值发生变化 { Slider* slider = (Slider*)pSender; int percent = slider->getPercent(); log("========>>>>>>Slider percent is %d%%", percent); } }--------------------------------------------------------------------------ListView
void HelloWorld::addListView() { /*const char* image[] = { "button/Button01.png","button/Button01Disabled.png","button/Button01Pressed.png", "button/Button02.png","button/Button02Disabled.png","button/Button02Pressed.png" };*/ auto gb_sprite = Sprite::create("button/background.png"); /做背景,不添加到ListView中 Size size_gb = gb_sprite->getContentSize(); gb_sprite->setAnchorPoint(Vec2(0.5, 0)); gb_sprite->setPosition(Vec2(480, 100)); this->addChild(gb_sprite, 1); auto listview = ListView::create(); listview->setTag(100); listview->setDirection(ListView::Direction::BOTH); //不知道为什么这里只有设置NONE或者BOTH,是可以滑动的, listview->setPosition(Vec2(480, 120)); listview->setAnchorPoint(Vec2(0.5, 0)); listview->setContentSize(Size(size_gb.width-20,size_gb.height-100)); //设置listview的窗口大小 listview->setInnerContainerSize(Size(size_gb.width - 20, 1500)); //设置listview的内容大小 for (int i = 0; i < 6; i++) { Layout *layout = Layout::create(); //先创建一个layout,直接添加到ListView layout->setContentSize(Size(size_gb.width,60)); listview->addChild(layout); auto button = cocos2d::ui::Button::create("button/Button01.png", "button/Button01Pressed.png", "button/Button01Disabled.png"); button->setScale9Enabled(true); button->setContentSize(Size(200, 40)); layout->addChild(button); button->setPosition(Vec2(layout->getContentSize() / 2)); //调节button在layout上的位置,这里放在中央位置 } listview->addEventListener((const cocos2d::ui::ListView::ccListViewCallback)CC_CALLBACK_2(HelloWorld::ListViewEvent, this));//监听点击ListView中项目事件 listview->addEventListener((const cocos2d::ui::ScrollView::ccScrollViewCallback)CC_CALLBACK_2(HelloWorld::ScrollViewEvent, this));//监听滑动视图事件,回掉函数看之前的<span style="font-family: Arial, Helvetica, sans-serif;">ScrollView</span> log("listview->getItems().size()=%d", listview->getItems().size()); //显示ListView中的项目,这里有6个,指的是6个layout this->addChild(listview,1); } void HelloWorld::ListViewEvent(Ref* pSender, ListView::EventType type) { log("HelloWorld::ListViewEvent(Ref* pSender, ListView::EventType type)"); ListView *listview = (ListView*)pSender; //pSender是对应ListView,不是点击的对象 switch (type) { case cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_START:log("ListView::ON_SELECTED_ITEM_START ===>> listview :%d", listview->getTag()); break; case cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_END:log("ListView::ON_SELECTED_ITEM_END ===>> listview :%d", listview->getTag()); break; default: break; } }
效果图
上面是我调好的代码,现在说说可能会遇到的坑
1.一开始我往ListView中加的是Sprite,结果点击ListView中项目事件,怎么都不会发生,并且getItems().size()的值是0。后来换了button就好了,其他的大家在用的时候可以试试,我这边就不试了;
2.如果你直接把button加到ListView中会发现,你调整不了位置,button之间是紧挨着的。所以我每次先在往ListView中加一个Layout,接着把button加到Layout上,这里就可以调整位置了。如下图:
3.这个不知道是bug还是什么,反正我现在还不清楚原因:
listview->setDirection(ListView::Direction::BOTH); //不知道为什么这里只有设置NONE或者BOTH,是可以滑动的
如果我设置HORIZONTAL或者VERTICAL,你会发现不能滑动,Scrollview中是正常的;
******常用的基础容器快讲完了,等介绍完剩下的常用UI控件。我试着用做一个游戏,会用到这些容器,练习一下(时间待定,主要毕业设计都还没做完,毕不了业就惨了*_*)
相关文章推荐
- cocos2d-x Tiled地图坐标转换
- 记录一下游戏的上线
- Cocos2D 初步了解三:CCAction
- 如何下载旧版的ndk
- Cocos2D 初步了解二:图层与精灵
- 关于【cocos2d-X】 3.X 安卓如何打包 (我用的3.7.1) 针对第一次打包新手
- 跑偏程序员自学cocos2d-x之二 创建UI 设置监听
- cocos2d-x项目打包成android apk过程中所遇到的错误
- cocos2d游戏开发日记2
- cocos2d游戏开发日记1
- cocos2dx 创建精灵的5种方式
- cocos2dx 在Android.mk加源所有.CCP文件
- cocos2dx3.2 某些UI白屏或使用ClippingNode造成部分手机白屏
- cocos2dx scene的理解
- Cocos2d-x lua 屏幕适配
- cocos学习笔记:快速上手
- cocos2d平台判断
- 我的cocos2dx游戏
- 关于Cocos2d-x-lua的Android原生按键无反应的解决方法
- Cocos2d-x 3.x 声音播放