cocosStudio中使用PageView,ListView和ScrollView
晚上吃东西好像吃坏肚子了,
。但是技术还要继续研究。最近工作中要使用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());
}
这里只是一些简单的例子,如果想要研究更加仔细的东西,看源码。程序员必备的技能!
cocosStudio中使用PageView,ListView和ScrollView的更多相关文章
- ListView在ScrollView中不显示全部的问题
在实际应用中,我们可能会遇到把ListView放到ScrollView中的情况,在这种情况下,ListView的滑动属性与ScrollView的滑动出现冲突,从而ListView只显示一项.这里提供一 ...
- 解决水平ListView在ScrollView中出现的滑动冲突
解决的问题有两个: 1)实现水平滑动的ListView.重写AdapterView,上代码: package com.liucanwen.horizontallistview.view; imp ...
- ListView和ScrollView冲突
当ListView放在ScrollView中的时候,无论你设置高度为 match_parent(填充父窗体)和wrap_content(包裹内容)都只显示一行,这是你把ListView放在Linear ...
- 冲突--ListView与ScrollView冲突的4种解决方案
众所周知ListView与ScrollView都具有滚动能力,对于这样的View控件,当ScrollView与ListView相互嵌套会成为一种问题: 问题一:ScrollView与ListView嵌 ...
- 解决Android ListView 和 ScrollView 共存时冲突 问题 方法其一
转载请注明出处: http://www.goteny.com/articles/2013/11/8.html http://www.cnblogs.com/zjjne/p/3428480.html 当 ...
- Android 解决ScrollView嵌入ListView | GridView | ScrollView显示问题
一.ScrollView中嵌套ListView ScrollView和ListView都是滚动结构,很明显如果在ScrollView中加入ListView,可以预见性的知道,肯定会有显示/滚动的问题, ...
- 关于listview,scrollview显示模糊边缘的设置
朋友们有时可能在开发中遇到这样的莫名其妙的问题,listview或scrollview滑动时上边和下边会出现两条模糊的边缘,有时会影响到我们app的视觉效果,我们怎么去掉这两条模糊的边缘呢?很简单,一 ...
- android 开发-ListView与ScrollView事件冲突处理(事件分发机制处理)
ListView和ScrollView都存在滚动的效果,所以一般不建议listView和scrollView进行嵌套使用,但有些需求则需要用到两者嵌套.在android的学习中学了一种事件分发处理机制 ...
- 使用LinearLayout实现ListView,解决ListView和ScrollView滚动冲突
在项目中,我们常常会遇到一个ScrollView里面会嵌套ListView的情况,但往往你会发现,ListView和ScrollView的滚动时间会有冲突问题,造成ListView不能完全显示.虽然网 ...
随机推荐
- 使用MySQLWorkBench连接数据库
在日常使用中,经常使用命令行去连接MySQL数据库不方便,推荐使用MySQLWorkBench去远程连接进行管理,下面记录一下使用步骤: 1. 安装MySQLWorkBench后,界面如下,点击“+” ...
- maven无法下载依赖jar包—几种仓库的区别
一.问题背景 最近这两天,感觉自己智商急剧退化,到了自己都捉急的地步,呃,有必要记录下来,以后智商被人甩几条街的时候,看看这篇文字,找找灵感也是好的! 这个项目呢,是用IDEA开发的,我一切都弄好了, ...
- CCF认证题 搜索题
栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题. 栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的位置上可能 ...
- kb-07专题--线段树-01-单点修改,区间查和
给定区间长度,然后给两个操作,单点增加值和单点减值,询问一个区间的人数和:(水) 代码如下: /* 写的第一个线段树,丑: */ #include<iostream> #include&l ...
- linux监控平台搭建-cpu
linux监控平台搭建-cpu 目前服务器的主流CPU是intel或者AMD.到底主频是什么.多核.多线程.并发.并行.超频.一级缓存.二级缓存.三级缓存.i386.x86 cpu:含有算术逻辑.控制 ...
- 阶乘-递归-java
public class Main { public static void main(String[] args) { for (int i=0;i<11;i++){ System.out.p ...
- net9:磁盘目录文件保存到XML文档及其XML文档的读写操作,以及绑定XML到treeview
原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] directorytoxml类: using System;using System.Data;using Sys ...
- unity3d自动寻路教程
U3D的自动寻路插件是不少,但是其实U3D的PRO版本就提供了相当实用的自动寻路组件了,以下教程分别讲解自动寻路的路径选择优先,上楼梯跳下的条件判断等等实用方法,教程分三编,但这个教程没有讲到Navm ...
- Sphinx的GEO距离搜索 [转载]
近项目用sphinx做地理搜索,可是结果总是不对,明明很近却搜不到 结果检查sphinx源文件: static inline double sphSqr ( double v ) { return v ...
- 利用adb截屏
一 第一种方式 二 第二种方式