cocos2dx-ScrollView和 ListView、PageView控件的使用

这篇记录了三个控件的使用流程:ScrollView和 ListView、PageView。

ScrollView

ScrollView这个控件大家应该挺熟的吧,反正我是经常用到。

1、首先在Cocos Studio 的UI界面添加一个ScrollView的控件,然后设置其属性。ScrollView要设置的东西比较多,我一开始做了如下的设置:

a 设置scrollView的显示窗口大小(Size)为:300x300;

b 设置scrollView的容器层大小(ContentSize)为 300*300;

c 打开BounceBack,也就是当scrollView拖到边缘时有一种弹性的效果

d 设置name 为 scrollView

e 往scollView中添加三个ImageView控件,其中两个放在scrollView显示窗口内,另外一个放在scrollView的显示窗口下方

e 导出工程到Cocos2d-x项目的Resources目录中

2、在Cocos2d-x中加载ScrollView的Widget,代码如下:


1

2

Widget* scrollViewUi = GUIReader::getInstance()->widgetFromJsonFile("ScrollViewUI/ScrollViewUi_1.json");  

this->addChild(scrollViewUi,2);

调试发现,scrollView的widget已经添加进了场景,但是想拖动scrollView却无法拖动,这也就看不到放在scrollView上的最下方的ImageView控件。

回到Cocos Studio中看下之前ScrollView的属性设置,发现容器层的大小不应该设置成与显示窗口一样,而应该比它大,这样才能拖动scrollView,于是修改第一点的第 b 步:

b 设置scrollView的容器层大小(ContentSize)为 300*400;

重新导出Cocos Studio工程,并运行Cocos2d-x项目,拖动成功。

3、从scrollView的Widget中提取ScrollView。天真的我又到TestCpp中查找了下UIScrollView的控件名,结果啥都没看到,包括之后的ListView,PageView都是如此。最后我恍然大悟,说到底scrollView这类控件其实就是一个Layout嘛,所以他们都统一用Layout来加载就可以了。


1

2

auto layout = static_cast<Layout*>(Helper::seekWidgetByName(scrollViewUi,"scrollView"));  

layout->setPosition(Point(300,300));

4、ScrollView控件在cocostudio中的默认方向是竖直的,如果要改变为方向可以将Scroll Director中修改。

5、关于layout的源码我打算在PageView与ListView写完后再一起讲,那应该是一个比较大的模块。

------------------------------------------------------------------------------------------------------------------------

ListView

ListView这货说到底就是tableView,但个人感觉比tableView好用一点,因为,我基本没使用过tableView,如果你让我在cocos2dx用tableView实现某个UI,我肯定要花费点时间要了解下tableView的使用方法,原因就在于我认为只要用scrollView就可以实现tableView的所有功能了。

扯远了,进入ListView的主题中来:

新建一个Cocos Studio工程,命名为ListViewUI,然后拉一个ListView的控件到场景中,之后设置它的属性,设置方法和ScrollView还是有一定的出入,如下:

1、我先设置ListView的显示窗口大小(Size)为300x300;

2、设置name 为 ”ListView“;

3、选中ListView,右键--addObject,往ListView中添加一个ImageView控件。发现新添加的ImageView控件默认的位置在ListView的左上角,并且ImageView控件中的一个红色的”+“号告诉我是不能设置这个控件的基本属性的,也就无法挪动它的位置。我又尝试添加了个CheckBox控件,发现它默认的位置在之前的ImageView控件的右边,同时它也无法修改属性。这个情况让我始料不及,于是我又到属性栏里找原因,最终发现原因出在”child Control Layout“这一类的属性里,它的作用是自动给ListView中的控件排列位置,包括排列方向,控件间的距离等。还是比较好理解的,所以我没有截图啦。嘿嘿。

4、在ListView中不一定要设置容器层的大小,因为当你添加控件到ListView中,如果控件所处的坐标已经超出了ListView的显示窗口范围,那么ListView会自动调整容器层的大小。

5、个人感觉ListView还是蛮方便的,特别是对我这种之前一直将ScrollView当tableView用的人来说,简直就是福音啊!!!

6、在Cocos2d-x加载ListView控件,如下:


1

2

Widget* ListViewUi = GUIReader::getInstance()->widgetFromJsonFile("ListViewUi_1/ListViewUi_1.json");  

this->addChild(ListViewUi,2);

7、单独提取出ListView控件


1

2

auto layout = static_cast<Layout*>(Helper::seekWidgetByName(ListViewUi,"ListView"));  

layout->setPosition(Point(300,300));

----------------------------------------------------------------------------------------------------------------------------

PageView

终于看到PageView这货了,其实它也就是ScrollView的特别版。scrollView拖动多少界面就挪动多少,PageView拖一点界面就直接翻页了,真刺激。

下面看下PageView该从哪里搞起...过程还是蛮纠结的

1、首先往Cocos Studio场景中拖入一个PageView控件,然后选中控件,右键,在弹出的菜单中选择"add Child page",之后就会出现一个新的页面。这时候不要停,用同样的方式继续添加一个页面。将鼠标在编辑器的其他位置随便点击一下,之后再选中刚刚的PageView控件,发现已经没有“add Chid page”这个菜单了。可是如果我要再加好几个页面该怎么办呢?答案很简单,同时按“ctrl + z”,撤销之前的操作,直到回到PageView刚拖进场景时的状态,然后你可以继续添加页面了(我知道方法很挫。。);

2、改变Cocos Studio的页面大小。这个和上面那一步很像,你必须在PageView控件最初始的状态下才能改变它的Size,如果你已经添加了好几个页面,那么将无法改变它的Size;

3、往PageView中添加控件。这个就和ScrollView、ListView一样了,右键--add Object。

4、导出该Cocos Studio工程到Cocos2d-x项目的资源目录下。然后在Cocos2d-x中加载该Cocos Studio的widget:


1

cocos2d::ui::Widget* pageViewUi = GUIReader::getInstance()->widgetFromJsonFile("PageView/pageViewUi_01.json");

当出现效率问题的时候建议使用listView,他可以使用setIIemModel 达到使用一个模版,不用重复加载模版,可以提升很高的效率

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 17:42:53

cocos2dx-ScrollView和 ListView、PageView控件的使用的相关文章

iOS开发——实战技术OC篇&amp;点击状态栏ScrollView(包括子控件)自动滚到顶部

点击状态栏ScrollView(包括子控件)自动滚到顶部 其实这种方式我们平时见的还是比较多的,而且适合用户的需求,所以就搬来琢磨了一下,感觉效果还不错 这里就直接将解决思路一一写出来不将代码分段展示了,在代码中我加了详细的注释objective-c的套路和swift基本一样,在最后会将Swift和objective-c的代码一起放上,如果需要直接解决问题的童鞋可以直接将代码拷贝到工程里即可 首先创建一个topWindow继承至NSObject,这里我们考虑将这个功能完全封装起来,所以所有的方法

asp.net,关于Listview+DataPager控件使用

关于Listview+DataPager控件使用1.DAL层,根据开始条数+结束条数查询数据.2.BLL层,startRowIndex和maximumRows进行查询.(startRowIndex + 1, maximumRows + startRowIndex + 1);3.使用ObjectDataSource控件,配置数据源,   startRowIndex和maximumRows必须BLL逻辑层定义的方法参数名一致,   SelectCountMethod中添加查询总记录条数方法名.4.使

cocos2dx基础篇(13)——按钮控件CCControlButton

[引言] 按钮类CCControlButton继承于控件类CCControl. 控件类CCControl主要向子类提供了一系列的控件触发事件.当子控件触发相关的事件后,就会执行相关的控件事件回调函数.这与之前讲的CCMenu中的菜单按钮回调是类似的. 控件类CCControl主要有三个子类: (1)开关控件CCControlSwitch (2)滑块控件CCControlSlider (3)按钮控件CCControlButton 本节讲的是其子类其中之一:按钮类CCControlButton. [

Android ListView列表控件的简单使用

ListView 列表是我们经常会使用的控件, 如果想要自定义里面的显示的话是挺麻烦的, 需要新建XML.Class SimpleAdapter这两个文件, 较为麻烦. 如果我们只是想显示两.三行文字在上面, 却又不想那么麻烦呢? 那我们只要新建一个XML就够了.  这里以显示一个ListView项里三个TextView为例.  首先我们要创建一个XML文件, 这个XML文件是用来作为单个ListView项布局用的.  list_row.xml[java]<?xml version="1.

scrollview嵌套上下拉控件嵌套recyclerview

相信会碰到很多类似的需求,一个列表控件,然后控件上方的一个头部需要自定义,这样就不好有时候也不能加在列表控件的头部了,那必须得嵌套一层scrollview了,没毛病,那么一般的列表控件都是有上拉下拉的操作,而且一般也是在 github 上找寻一个收藏量高的 来做为一个全局通用的上下拉控件,这里问题就来了,一般的 scrollview 嵌套 recyclerview 或者 listview 都毕竟容易解决,可是在加上一层上下拉控件呢?上下拉控件肯定会有它自己的触摸处理机制,这样你改起来也很麻烦,这

WPF 实现 DataGrid/ListView 分页控件

在WPF中,通常会选用DataGrid/ListView进行数据展示,如果数据量不多,可以直接一个页面显示出来.如果数据量很大,2000条数据,一次性显示在一个页面中,不仅消耗资源,而且用户体验也很糟糕.这篇博客将介绍如何创建一个分页控件. 为了简单起见,这个分页控件目前只有 首页/上一页/下一页/末页/总页数/第几页 等功能.实现思路,首页/上一页/下一页/末页 这四个通过路由事件来实现,在使用时可以使用命令进行绑定,或者直接使用均可.总页数和第几页通过依赖属性来实现,使用时将页数进行绑定显示

ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(一)

为什么使用ListView+DataPager的方式实现分页显示? .net提供的诸多数据绑定控件,每一种都有它自己的优点和缺点.如果需要对数据进行操作,如果数据量不大的情况下,DataList和GridView是最好的选择,但是他们会生产额外的<table><tr><tbody><td>标签.如果只是罗列出来一些简单的数据,出于对性能的考虑,repeater必然是首选.当然ListView和DataPager的组合必将是开发中的黄金组合,无论从性能上和功能

ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(二)

使用ListView控件进行修改,删除与添加操作1.页面代码: <asp:ListView ID="lv2" runat="server" onpagepropertieschanging="lv_PagePropertiesChanging2" onitemcanceling="lv2_ItemCanceling" onitemediting="lv2_ItemEditing" onitemupda

【Cocos2dx】利用音量螺旋控件控制血量条

其实主要是利用一个小例子来说明两个控件如何使用,一个是CCControlPotentiometer音量螺旋控件,另一个是如何利用CCControlSlider控件整出游戏中常见的血量条. 如图,随着音量螺旋控件的扭动,血量条在变化. 制作过程如下: 一.基本准备 1.首先同样还是利用(cocos2d-x-2.2.6安装目录)\tools\project-creator下的create_project.py用python命令创建一个名为PotentiometerSlider的工程.这里在<[Coc