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

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

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

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

ScrollView:

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

  1. void HelloWorld::initScrollView() {
  2. auto layer = CSLoader::getInstance()->createNode("ScrollViewScene.csb");
  3. this->addChild(layer, 1);
  4.  
  5. auto scrollView = static_cast<ui::ScrollView *>(Helper::seekWidgetByName(static_cast<Widget *>(layer), "ScrollView_1"));
  6.  
  7. for (auto i = 0; i< 4; i++) {
  8. auto btn = Button::create("bunny.png"); //这里我是直接加入了一个按钮,还可以加入其它的东西,甚至是一个子界面
  9. btn->setTouchEnabled(true);
  10. btn->setTitleText("scrollViewBtn");
  11. btn->setTitleFontSize(30);
  12. scrollView->addChild(btn);
  13. btn->addClickEventListener(CC_CALLBACK_1(HelloWorld::clickBtnCallback, this));
  14. btn->setPosition(Vec2(300, 50 + i * 100)); //自己设置对应的位置
  15. }
  16.  
  17. scrollView->scrollToBottom(0.1f, false);
  18. // scrollView->setDirection(cocos2d::ui::ScrollView::Direction::VERTICAL);
  19. // scrollView->jumpToBottom();
  20. scrollView->addEventListener(CC_CALLBACK_2(HelloWorld::scrollViewMoveCallback, this));
  21. }
  22.  
  23. void HelloWorld::scrollViewMoveCallback(cocos2d::Ref *pSender, cocos2d::ui::ScrollView::EventType eventType) {
  24. switch (eventType) {
  25. case ui::ScrollView::EventType::SCROLLING:
  26. CCLOG("scrolling");
  27. break;
  28. case ui::ScrollView::EventType::SCROLL_TO_BOTTOM:
  29. CCLOG("scrolling bottom");
  30. break;
  31. case ui::ScrollView::EventType::SCROLL_TO_TOP:
  32. CCLOG("scrolling top");
  33. break;
  34. default:
  35. break;
  36. }
  37. }

PageView:

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

  1. void HelloWorld::initPageView() {
  2. auto layer = CSLoader::getInstance()->createNode("PageViewScene.csb");
  3. this->addChild(layer, 1);
  4. auto winSize = Director::getInstance()->getWinSize();
  5. auto pageView = static_cast<ui::PageView *>(Helper::seekWidgetByName(static_cast<Widget *>(layer), "PageView_1"));
  6. pageView->setTouchEnabled(true);
  7.  
  8. for (auto i = 0; i<5; i++) {
  9. auto layout = Layout::create();
  10. layout->setContentSize(pageView->getContentSize());
  11. // auto node = CSLoader::getInstance()->createNode("Stone.csb");
  12. // layout->addChild(node);
  13. auto label = Text::create();
  14. label->setString(std::string(__String::createWithFormat("xxx _%d", i)->getCString()));
  15. label->setFontSize(40);
  16. layout->addChild(label);
  17. label->setPosition(Vec2(100, 100));
  18. pageView->addPage(layout);
  19.  
  20. }
  21. }

ListView:

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

  1. void HelloWorld::initListView() {
  2. auto node = CSLoader::getInstance()->createNode("MainScene.csb");
  3. addChild(node, 1);
  4.  
  5. auto node1 = CSLoader::getInstance()->createNode("Stone.csb");
  6. // node->addChild(node1, 1);
  7. // node1->setPosition(Vec2(300, 500));
  8.  
  9. auto layout = static_cast<Layout *>(Helper::seekWidgetByName(static_cast<Widget *>(node), "ListView_1"));
  10. // layout->setPosition(Vec2(300, 300));
  11.  
  12. layout->removeAllChildren();
  13. auto listView = static_cast<ListView *>(layout);
  14. listView->setGravity(cocos2d::ui::ListView::Gravity::CENTER_HORIZONTAL);
  15. listView->setItemsMargin(10.0f);
  16. listView->setClippingEnabled(true);
  17.  
  18. for (auto i = 0; i<10; i++) {
  19. if (i == 1) {
  20. listView->insertCustomItem(static_cast<Widget *>(node1), i);
  21. continue;
  22. }
  23. if (i%2 == 0) {
  24. auto img = ImageView::create();
  25. img->loadTexture("bunny.png");
  26. listView->insertCustomItem(img, i);
  27. img->setTouchEnabled(true);
  28. img->addTouchEventListener(CC_CALLBACK_2(HelloWorld::clickImgCallback, this));
  29. img->setTag(i);
  30. } else {
  31. // auto img = ImageView::create();
  32. // img->loadTexture("stone.png");
  33. // listView->insertCustomItem(img, i);
  34. auto btn = Button::create();
  35. btn->loadTextureNormal("stone.png");
  36. btn->setTouchEnabled(true);
  37. auto btnName = __String::createWithFormat("BTN_%d", i);
  38. btn->setTitleText(std::string(btnName->getCString()));
  39. btn->setTitleFontSize(20);
  40. btn->setTag(i);
  41. btn->addClickEventListener(CC_CALLBACK_1(HelloWorld::clickBtnCallback, this));
  42. listView->insertCustomItem(btn, i);
  43. }
  44. }
  45. }
  46.  
  47. void HelloWorld::clickBtnCallback(cocos2d::Ref *pSender) {
  48. auto btn = static_cast<Button *>(pSender);
  49. CCLOG("click btn Tag = %d", btn->getTag());
  50. }
  51.  
  52. void HelloWorld::clickImgCallback(cocos2d::Ref *pSender, Widget::TouchEventType event) {
  53. if (event != Widget::TouchEventType::ENDED) {
  54. return;
  55. }
  56. auto img = static_cast<ImageView *>(pSender);
  57. CCLOG("click img Tag = %d", img->getTag());
  58. }

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

cocosStudio中使用PageView,ListView和ScrollView的更多相关文章

  1. ListView在ScrollView中不显示全部的问题

    在实际应用中,我们可能会遇到把ListView放到ScrollView中的情况,在这种情况下,ListView的滑动属性与ScrollView的滑动出现冲突,从而ListView只显示一项.这里提供一 ...

  2. 解决水平ListView在ScrollView中出现的滑动冲突

      解决的问题有两个:  1)实现水平滑动的ListView.重写AdapterView,上代码: package com.liucanwen.horizontallistview.view; imp ...

  3. ListView和ScrollView冲突

    当ListView放在ScrollView中的时候,无论你设置高度为 match_parent(填充父窗体)和wrap_content(包裹内容)都只显示一行,这是你把ListView放在Linear ...

  4. 冲突--ListView与ScrollView冲突的4种解决方案

    众所周知ListView与ScrollView都具有滚动能力,对于这样的View控件,当ScrollView与ListView相互嵌套会成为一种问题: 问题一:ScrollView与ListView嵌 ...

  5. 解决Android ListView 和 ScrollView 共存时冲突 问题 方法其一

    转载请注明出处: http://www.goteny.com/articles/2013/11/8.html http://www.cnblogs.com/zjjne/p/3428480.html 当 ...

  6. Android 解决ScrollView嵌入ListView | GridView | ScrollView显示问题

    一.ScrollView中嵌套ListView ScrollView和ListView都是滚动结构,很明显如果在ScrollView中加入ListView,可以预见性的知道,肯定会有显示/滚动的问题, ...

  7. 关于listview,scrollview显示模糊边缘的设置

    朋友们有时可能在开发中遇到这样的莫名其妙的问题,listview或scrollview滑动时上边和下边会出现两条模糊的边缘,有时会影响到我们app的视觉效果,我们怎么去掉这两条模糊的边缘呢?很简单,一 ...

  8. android 开发-ListView与ScrollView事件冲突处理(事件分发机制处理)

    ListView和ScrollView都存在滚动的效果,所以一般不建议listView和scrollView进行嵌套使用,但有些需求则需要用到两者嵌套.在android的学习中学了一种事件分发处理机制 ...

  9. 使用LinearLayout实现ListView,解决ListView和ScrollView滚动冲突

    在项目中,我们常常会遇到一个ScrollView里面会嵌套ListView的情况,但往往你会发现,ListView和ScrollView的滚动时间会有冲突问题,造成ListView不能完全显示.虽然网 ...

随机推荐

  1. 紫书第一章训练1 D -Message Decoding

    Some message encoding schemes require that an encoded message be sent in two parts. The first part, c ...

  2. jQuery全屏滚动插件fullPage.js使用中遇到的问题(滑动轮播效果无效)

    1.fullPage.js是什么? fullPage.js 是一个基于 jQuery ,用来制作全屏网站的插件. 2.兼容性: - jquery兼容:兼容 jQuery 1.7+ - 浏览器兼容: I ...

  3. bzoj3210 花神的浇花集会 坐标

    题目大意:给定平面上的n个点,求一个点到这n个点的切比雪夫距离之和最小 与3170不同的是这次选择的点无需是n个点中的一个 首先将每个点(x,y)变为(x+y,x-y) 这样新点之间的曼哈顿距离的一半 ...

  4. Linux 系统自动备份数据库及定时任务的设置

    首先想到数据库的自动备份,由于涉及业务原因需要在每天固定的时间去调用方法执行备份.如果不考虑业务要求,只考虑实现的话可以通过Linux系统提供的定时任务去完成备份操作. 本文讲的就是利用Linux系统 ...

  5. 卡牌游戏(bzoj 3191)

    Description   N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字 ...

  6. JavaWeb学习总结(十七)——JSP中的九个内置对象(转)

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  7. elementui table 分页 和 tabel 前加序列号

    记录下来备忘 结构如下 Report.vue <template> <div> <home-header></home-header> <div ...

  8. 开始学习es6(二) let 与 const 及 块级作用域

    1.var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) cons ...

  9. HDU 2767:Proving Equivalences(强连通)

    题意: 一个有向图,问最少加几条边,能让它强连通 方法: 1:tarjan 缩点 2:采用如下构造法: 缩点后的图找到所有头结点和尾结点,那么,可以这么构造:把所有的尾结点连一条边到头结点,就必然可以 ...

  10. python 当pip不能用的时候可以去找python安装包

    初学python,一直pip安装各种包,突然间有一天pip莫名其妙不能用了,除了pip help全部都是没反应 百度好像没人出现过pip挂掉的情况 花了一小时修复pip,卸载啊,路径啊,全部无效 百度 ...