1、概述

上一篇我们在编辑器中设计了一个静态的UIScrollView,而通常我们都需要在程序中动态增加信息。插入元素的位置怎么确定?在3.0中UILayout已经实现了基本的布局,一起来看看吧:

2、编辑界面

打开CocoStudio的UIEditor 编辑一个界面,创建一个ScrollView和两个Button。因为ScrollView继承自UILayout,这里我们采用它。不太能搞定的童鞋可参考:Cocos2d-x 3.0 开发(十四)使用UIScrollView 实现大小不同物品拖动展示

注意此处ScrollView子控件布局中,我们选择“线性纵向”,并且在“特性->滑动方向”也选择为“vertical”。编辑好后保存导出。

3、关联程序

运行脚本,创建一个testLayout程序,将导出的文件复制到Resource目录下。

声明一个UILayout:

[cpp] view plaincopyprint?
  1. #include "gui\CocosGUI.h"
  2. private:
  3. gui::UILayout* m_layout;

更改init:

[cpp] view plaincopyprint?
  1. bool HelloWorld::init()
  2. {
  3. //
  4. // 1. super init first
  5. if ( !Layer::init() )
  6. {
  7. return false;
  8. }
  9. Size visibleSize = Director::getInstance()->getVisibleSize();
  10. Point origin = Director::getInstance()->getVisibleOrigin();
  11. //Load Layout
  12. m_layout = dynamic_cast<UILayout*>(cocostudio::GUIReader::shareReader()->widgetFromJsonFile("testLayout.json"));
  13. auto layer = UILayer::create();
  14. layer->addWidget(m_layout);
  15. this->addChild(layer);
  16. //set button react
  17. UIButton* buttonA = dynamic_cast<UIButton*>(m_layout->getChildByName("TextButtonA"));
  18. buttonA->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton));
  19. UIButton* buttonB = dynamic_cast<UIButton*>(m_layout->getChildByName("TextButtonB"));
  20. buttonB->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton));
  21. return true;
  22. }

添加一个响应函数

[cpp] view plaincopyprint?
  1. void HelloWorld::touchButton(cocos2d::Object* obj,TouchEventType type)
  2. {
  3. if(type == TOUCH_EVENT_ENDED)
  4. {
  5. auto button = dynamic_cast<UIButton*>(obj);
  6. if(strcmp(button->getName(),"TextButtonA") == 0)
  7. {
  8. //add element on left
  9. addLeft();
  10. }
  11. else
  12. {
  13. //add element on right
  14. addRight();
  15. }
  16. }
  17. }

编译运行,可以看到如下界面:

4、添加控件

实现addLeft() 和addRight():

[cpp] view plaincopyprint?
  1. void HelloWorld::addLeft()
  2. {
  3. auto layoutParameter = UILinearLayoutParameter::create();
  4. layoutParameter->setGravity(UILinearGravity::LINEAR_GRAVITY_LEFT);
  5. auto scrollView = ((UIScrollView*)m_layout->getChildByName("ScrollView"));
  6. UIWidget*  widget = makeWords();
  7. widget->setLayoutParameter(layoutParameter);
  8. scrollView->addChild(widget);
  9. scrollView->doLayout();
  10. }
  11. void HelloWorld::addRight()
  12. {
  13. auto layoutParameter = UILinearLayoutParameter::create();
  14. layoutParameter->setGravity(UILinearGravity::LINEAR_GRAVITY_RIGHT);
  15. auto scrollView = ((UIScrollView*)m_layout->getChildByName("ScrollView"));
  16. UIWidget*  widget = makeWords();
  17. widget->setLayoutParameter(layoutParameter);
  18. widget->setColor(Color3B(0,255,0));
  19. scrollView->addChild(widget);
  20. scrollView->doLayout();
  21. }
  22. gui::UIWidget* HelloWorld::makeWords()
  23. {
  24. UIButton* button = UIButton::create();
  25. button->loadTextureNormal("button.png");
  26. button->setTitleText("Hello UILayout \n I'm Cocos2d-x");
  27. button->setTitleColor(Color3B(0,0,0));
  28. return button;
  29. }

使用重写的addChild来添加子控件。通过调整它的UILinearLayoutParameter来控制控件的显示位置。

要注意的一点是,在UIScrollView中添加子控件后,要调用doLayout这个函数整理子控件的位置。

最后编译运行即可。

5、总结

使用UILayout进行布局,可以方便的控制动态添加元素的位置。

Demo 下载:http://download.csdn.net/detail/fansongy/6730481

本篇博客出自阿修罗道,转载请注明出处,禁止用于商业用途:http://blog.csdn.net/fansongy/article/details/17382049

转载于:https://www.cnblogs.com/dudu580231/p/4983789.html

实习小白::(转) Cocos2d-x 3.0 开发(十五)使用UILayout布局,制作对话界面相关推荐

  1. 打怪升级之小白的大数据之旅(二十五)<Java面向对象进阶之IO流三 其他常见流>

    打怪升级之小白的大数据之旅(二十五) Java面向对象进阶之IO流三 其他常见流 上次回顾 上一章,我们学习了常用的字节流与字符流,本章,我会将其他的一些常见的流进行分享,IO流很多,我介绍不完,就挑 ...

  2. STC8H开发(十五): GPIO驱动Ci24R1无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  3. Linux开发十五_lcd驱动

    Linux开发十五 lcd驱动 象棋小子    1048272975 lcd能够支持彩色图像的显示和视频的播放,是一种很重要的输出设备,在一些嵌入式人机交互系统中,也往往需要lcd进行显示.Linux ...

  4. 总结2019大前端开发十大战略性技术布局

    2010年,如果你能学会Android开发到目前,你的薪资不会低于年薪50万 2015年,如果你能熟练使用react到目前,你的薪资不会低于月薪30K-- 看到这两个数据,也许有人会说,首先技术刚出来 ...

  5. 决胜未来,2019年前端开发十大战略性技术布局 1

    2010年的你,如果能学会Android开发,现在的你,薪资不会低于年薪50万-- 2015年的你,如果能熟练使用react,现在的你,薪资不会低于月薪30K-- 看到这两个数据,也许有人会反驳:技术 ...

  6. 决胜未来,2019前端开发十大战略性技术布局

    2010年的你,如果能学会Android开发,现在的你,薪资不会低于年薪50万-- 2015年的你,如果能熟练使用react,现在的你,薪资不会低于月薪30K-- 看到这两个数据,也许有人会反驳:技术 ...

  7. 实习小白::(转) Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件

    1.概述 上篇说到将CocoStudio的导出文件在程序中运行出来,但是并没有用户交互,即点击响应,程序的逻辑判断也都没有.这篇中我们把它们加进去,这样就可以算一个完整的程序了.先上个图: 运行后,点 ...

  8. Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件

    本篇博客出自阿修罗道,转载请注明出处:http://blog.csdn.net/fansongy/article/details/12795299 1.概述 上篇说到将CocoStudio的导出文件在 ...

  9. 深入浅出Zabbix 3.0 -- 第十五章 Zabbix 协议与API

    第十五章 Zabbix 协议与API 本章将介绍和开发相关的Zabbix协议和API的内容,通过对Zabbix协议和API的深入了解,你可以利用Zabbix协议编写客户端程序并将其嵌入的产品或系统中, ...

  10. SQL2K数据库开发十五之表操作查看表中的数据

    1.可以使用SELECT语句查询表中的数据.如在查询分析器中执行SELECT * FROM Products语句就可以查询Products表中的数据,如下图: 2.如在企业管理器中查询表中数据,则要展 ...

最新文章

  1. mysql临时表如何分页查询慢_数据量很大,分页查询很慢,怎么优化?
  2. 伟大前程与技术难关:量子机器学习该如何走进现实?
  3. boost::units模块单位/数量操作和转换的测试程序
  4. Docker入门到实践
  5. 您拒绝了位置共享服务器,共享服务器拒绝访问
  6. 路飞学院python官网-路飞学院-Python爬虫实战密训班-第1章
  7. mysql多源gtid复制_mysql的GTID复制和多源复制
  8. MSPA安装与生态源地提取
  9. python+flask编写一个简单的登录接口例子
  10. base包中自定义activity
  11. 深浅拷贝和数列,变量的区别
  12. Mac怎么读写NTFS格式?
  13. python uint8怎么定义_Python ctypes.c_uint8方法代码示例
  14. 网页版Facebook第三方登陆
  15. 冬虫夏草之技术路线图之二【“术”——业务篇】
  16. OpenCV图形处理基本概念
  17. pvt检查是什么意思_专业术语EVT、DVT、PVT、MP是什么意思?
  18. 一男老师每日百词转载+连载(3)
  19. Costco市值10年增长5倍的秘诀:水坝式经营
  20. php if为空那么,PHP中判断数组是否为空的方法

热门文章

  1. 操作系统服务:OS模块
  2. tensorflow如何微调时如何只训练后两层_XLNet只存在于论文?都替你封装好了还不来用!...
  3. js调用打印机直接打印_打印机如何打印二维码
  4. h5跳转小程序页面url_小程序和h5跳转
  5. 蓝桥杯2015年第六届C/C++省赛B组第七题-牌型种数
  6. oracle-Mount
  7. 二分图——匈牙利算法——的学习
  8. Labview学习笔记(一)
  9. 四、kafka整体架构
  10. [HTML/CSS]浮动的那点事儿