晚上吃东西好像吃坏肚子了,。但是技术还要继续研究。最近工作中要使用CocosStudio做界面,好吧,不管对他有什么偏见,学习一下吧。这里主要记录一下三个控件的使用和说明。就是ScrollView,ListView和PageView。

首先大致的介绍一下这三个控件吧,scrollView顾名思义,滑动容器可以上下滑动,也可以左右滑动。PageView可以这么理解,它就是scrollView的超级版,因为它是整页滑动。listView是列表容器,它相对与其它两个控件来讲,它不不能添加精灵、粒子、声音、地图和节点对象。

在cocosStudio(使用版本2.0.6)中创建,如下图,可以看到三种容器分别是滑动容器,列表容器和翻页容器

创建地方式就是直接拖到场景中,然后在其中加入对应地组件,这是在一些确定地情况下使用的。但是,通常的情况是我们程序需要使用代码来根据不同的数据动态的加入各种的界面组件。下面就使用程序创建加入组件,这个前提依然是使用cocosStudio创建一个空的容器,然后手动加入容器中的内容。

ScrollView:

cocosStudio中创建一个场景,场景中放入一个空的scrollView,下面代码加入其中的组件

void HelloWorld::initScrollView() {
auto layer = CSLoader::getInstance()->createNode("ScrollViewScene.csb");
this->addChild(layer, 1); auto scrollView = static_cast<ui::ScrollView *>(Helper::seekWidgetByName(static_cast<Widget *>(layer), "ScrollView_1")); for (auto i = 0; i< 4; i++) {
auto btn = Button::create("bunny.png"); //这里我是直接加入了一个按钮,还可以加入其它的东西,甚至是一个子界面
btn->setTouchEnabled(true);
btn->setTitleText("scrollViewBtn");
btn->setTitleFontSize(30);
scrollView->addChild(btn);
btn->addClickEventListener(CC_CALLBACK_1(HelloWorld::clickBtnCallback, this));
btn->setPosition(Vec2(300, 50 + i * 100)); //自己设置对应的位置
} scrollView->scrollToBottom(0.1f, false);
// scrollView->setDirection(cocos2d::ui::ScrollView::Direction::VERTICAL);
// scrollView->jumpToBottom();
scrollView->addEventListener(CC_CALLBACK_2(HelloWorld::scrollViewMoveCallback, this));
} void HelloWorld::scrollViewMoveCallback(cocos2d::Ref *pSender, cocos2d::ui::ScrollView::EventType eventType) {
switch (eventType) {
case ui::ScrollView::EventType::SCROLLING:
CCLOG("scrolling");
break;
case ui::ScrollView::EventType::SCROLL_TO_BOTTOM:
CCLOG("scrolling bottom");
break;
case ui::ScrollView::EventType::SCROLL_TO_TOP:
CCLOG("scrolling top");
break;
default:
break;
}
}

PageView:

cocosStudio中创建一个场景,场景中放入一个空的pageView,加入其中的组件

void HelloWorld::initPageView() {
auto layer = CSLoader::getInstance()->createNode("PageViewScene.csb");
this->addChild(layer, 1);
auto winSize = Director::getInstance()->getWinSize();
auto pageView = static_cast<ui::PageView *>(Helper::seekWidgetByName(static_cast<Widget *>(layer), "PageView_1"));
pageView->setTouchEnabled(true); for (auto i = 0; i<5; i++) {
auto layout = Layout::create();
layout->setContentSize(pageView->getContentSize());
// auto node = CSLoader::getInstance()->createNode("Stone.csb");
// layout->addChild(node);
auto label = Text::create();
label->setString(std::string(__String::createWithFormat("xxx _%d", i)->getCString()));
label->setFontSize(40);
layout->addChild(label);
label->setPosition(Vec2(100, 100));
pageView->addPage(layout); }
}

ListView:

cocosStudio中创建一个场景,场景中放入一个空的listView,下面代码加入其中的组件

void HelloWorld::initListView() {
auto node = CSLoader::getInstance()->createNode("MainScene.csb");
addChild(node, 1); auto node1 = CSLoader::getInstance()->createNode("Stone.csb");
// node->addChild(node1, 1);
// node1->setPosition(Vec2(300, 500)); auto layout = static_cast<Layout *>(Helper::seekWidgetByName(static_cast<Widget *>(node), "ListView_1"));
// layout->setPosition(Vec2(300, 300)); layout->removeAllChildren();
auto listView = static_cast<ListView *>(layout);
listView->setGravity(cocos2d::ui::ListView::Gravity::CENTER_HORIZONTAL);
listView->setItemsMargin(10.0f);
listView->setClippingEnabled(true); for (auto i = 0; i<10; i++) {
if (i == 1) {
listView->insertCustomItem(static_cast<Widget *>(node1), i);
continue;
}
if (i%2 == 0) {
auto img = ImageView::create();
img->loadTexture("bunny.png");
listView->insertCustomItem(img, i);
img->setTouchEnabled(true);
img->addTouchEventListener(CC_CALLBACK_2(HelloWorld::clickImgCallback, this));
img->setTag(i);
} else {
// auto img = ImageView::create();
// img->loadTexture("stone.png");
// listView->insertCustomItem(img, i);
auto btn = Button::create();
btn->loadTextureNormal("stone.png");
btn->setTouchEnabled(true);
auto btnName = __String::createWithFormat("BTN_%d", i);
btn->setTitleText(std::string(btnName->getCString()));
btn->setTitleFontSize(20);
btn->setTag(i);
btn->addClickEventListener(CC_CALLBACK_1(HelloWorld::clickBtnCallback, this));
listView->insertCustomItem(btn, i);
}
}
} void HelloWorld::clickBtnCallback(cocos2d::Ref *pSender) {
auto btn = static_cast<Button *>(pSender);
CCLOG("click btn Tag = %d", btn->getTag());
} void HelloWorld::clickImgCallback(cocos2d::Ref *pSender, Widget::TouchEventType event) {
if (event != Widget::TouchEventType::ENDED) {
return;
}
auto img = static_cast<ImageView *>(pSender);
CCLOG("click img Tag = %d", img->getTag());
}

这里只是一些简单的例子,如果想要研究更加仔细的东西,看源码。程序员必备的技能!

最新文章

  1. 第二章 编写与设置Servlet
  2. Linux下搭建VPN服务器(CentOS、pptp)转
  3. [转]C/C++ 实现文件透明加解密
  4. 15个最佳的代码评审(Code Review)工具
  5. Centos rsync+inotify 实现数据同步备份
  6. 使用Condition Variables 实现一个线程安全队列
  7. nrf51822-配对绑定实现过程
  8. n行m列的网格中含有的矩形数
  9. Grails重定向以及Render、Session的使用
  10. jquery.uploadifive 解决上传限制图片或文件大小
  11. phoenix
  12. Verilog中变量位宽注意
  13. Go语言是我见过最简洁的语言(除了lua)
  14. 【Unity Shader】2D动态云彩
  15. Python:Day15 函数
  16. jetty安装教程
  17. React Natived打包报错java.io.IOException: Could not delete path &#39;...\android\support\v7&#39;解决
  18. WyBox 7620a 启用第二个串口
  19. java中Integer和int的区别(转)
  20. 762. Prime Number of Set Bits in Binary Representation

热门文章

  1. 解决ul的li横向排列换行的问题
  2. JStorm源代码阅读——消息的确认机制
  3. [CODEVS1917] 深海机器人问题(最小费用最大流)
  4. bzoj 1061~1065【Noi2008】解题报告
  5. 浅谈Android反调试 之 PTRACE_TRACEME
  6. 通过设置chrome浏览器解决跨域问题,在本地进行开发工作
  7. Tomcat和JVM的内存配置
  8. LOOPS(hdu 3853)
  9. 第6章 I/O多路复用
  10. NoSQL数据库 Couchbase Server - 分布式缓存