Cocos2d-x 3.9教程:9. Cocos2d-x中基于布局的容器控件

Cocos2d-x 3.9教程

9. Cocos2d-x中基于布局的容器控件

1.1. ScrollView滚动视图

滚动视图是一种常见的容器型控件,它里面可以放置其他组件。Cocos2d-x中的ScrollView本身也是一种Layout,所以也可以在其中使用线形或者相对布局。ScrollView的显示效果,主要是取决于:

setContentSize(),设置显示出来的区域大小“视口”。

setInnerContainerSize(),设置内部容器的大小,决定了拖动的区域大小;它必须大于或等于setContentSize()。

以及添加进内部的组件和布局位置。

ScrollView,内部的容器为innerLayout,我们的控件放在这个layout上。任一时刻拖动ScrollView,会在“视口”显示innerLayout的一部分:效果示意图如下:


拖动视口,改变的是内部容器innerLayout的位置偏移。则通过视口看到的内容得以改变:


注意,因此内部容器innerLayout上我们加入的控件,需要我们自己来摆放到正确的位置上。

#include "ui/UIScrollView.h"

ui::ScrollView *scrollView = ui::ScrollView::create();

 

scrollView->setBackGroundColorType(ui::Layout::BackGroundColorType::SOLID);

scrollView->setBackGroundColor(Color3B::RED);

scrollView->setPosition(Vec2(50, 100));

scrollView->setContentSize(Size(400, 300));//外部显示的大小

scrollView->setBounceEnabled(true);//是否开启拖动到头后的反弹效果

scrollView->setInnerContainerSize(Size(500, 500));//内部的尺寸,决定了拖动的区域大小;它必须大于或等于setContentSize

//scrollView->setTouchEnabled(true);//是否允许拖动空白处滚动视图,默认为是;否的话,只能拖动里面的组件来滚动视图

scrollView->setDirection(ui::ScrollView::Direction::VERTICAL);//允许拖动的方向

scrollView->setLayoutType(Layout::Type::VERTICAL);//垂直布局;ScrollView本身就是一种Layout

 

//绑定响应事件

scrollView->addEventListener(CC_CALLBACK_2(HelloWorld::onScrollViewEvent, this));

 

Button * button1 = Button::create("button.png");

scrollView->addChild(button1);

Button * button2 = Button::create("potentiometerButton.png");

scrollView->addChild(button2);

Button * button3 = Button::create("potentiometerProgress.png");

scrollView->addChild(button3);

Button * button4 = Button::create("potentiometerTrack.png");

scrollView->addChild(button4);

Button * button5 = Button::create("button_normal.png");

scrollView->addChild(button5);

Button * button6 = Button::create("CloseNormal.png");

scrollView->addChild(button6);

 

this->addChild(scrollView);

void HelloWorld::onScrollViewEvent(Ref* pSender, cocos2d::ui::ScrollView::EventType event)

{

ui::ScrollView * scrollView = (ui::ScrollView *)pSender;

 

switch (event)

{

case cocos2d::ui::ScrollView::EventType::SCROLL_TO_TOP:

CCLOG("scrollView is scroll to top");

break;

case cocos2d::ui::ScrollView::EventType::SCROLLING:

//CCLOG("scrollView is scrolling");

break;

case cocos2d::ui::ScrollView::EventType::SCROLL_TO_BOTTOM:

CCLOG("scrollView is scroll to bottom");

break;

case cocos2d::ui::ScrollView::EventType::BOUNCE_TOP:

CCLOG("scrollView is bounce to top");

break;

case cocos2d::ui::ScrollView::EventType::BOUNCE_BOTTOM:

CCLOG("scrollView is bounce to bottom");

break;

}

}

注意,由于cocos2d::extension库中也有ScrollView,为了避免编译时的冲突。建议类的名字写全路径,如:cocos2d::ui::ScrollView在使用Event时,同样也需要使用全路径:cocos2d::ui::ScrollView::EventType

最终效果如下:

初始位置:

拖动到最下面的位置:

由于我们设定了允许回弹,所以拖动到某一端时,还可以继续拖动一段距离,松开即可回弹:

 

1.2. TableView桌面视图

注意,目前至最新版cocos2d-x3.9为止,TableView是属于extension库的,它继承自extension库的Scro

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值