被搭建安卓平台弄的够呛。周六下午终于有时间可以发博客里。
继续控件(下):
3、ControlStepper
bool ControlStepper::init()
{
CCSize size = CCDirector::sharedDirector()->getWinSize();
CCNode* layer = CCNode::create();
layer->setPosition(ccp(size.width / 2,size.height / 2));
this->addChild(layer,1);
double layer_width = 0;
CCScale9Sprite* background = CCScale9Sprite::create("buttonBackground.png");
background->setContentSize(CCSizeMake(100,50));
background->setPosition(ccp(layer_width + background->getContentSize().width / 2.0f,0));
layer->addChild(background);
//下面这两步 是时时更新设置显示在框里的内容,设置初始值为0.00
this->setDisplayValueLabel(CCLabelTTF::create("0", "HelveticaNeue-Bold", 30));
//设置位置,也就是现实在background的坐标
m_pDisplayValueLabel->setPosition(background->getPosition());
layer->addChild(m_pDisplayValueLabel);
layer_width += background->getContentSize().width;
//添加controlStepper
CCControlStepper *stepper = this->makeControlStepper();
stepper->setPosition(ccp (layer_width + 10 + stepper->getContentSize().width / 2, 0));
stepper->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlStepper::valueChanged), CCControlEventValueChanged);
layer->addChild(stepper);
//layer_width的值增加,增加一个background的长度
layer_width += stepper->getContentSize().width;
layer->setContentSize(CCSizeMake(layer_width,0));
layer->setAnchorPoint(ccp (0.5f,0.5f) );
this->valueChanged(stepper, CCControlEventValueChanged);
//add mainMenu
MainMenu *mainMenu = new MainMenu();
mainMenu->mainMenu();
this->addChild(mainMenu);
return true;
}
CCControlStepper* ControlStepper::makeControlStepper()
{
CCSprite *minusSprite = CCSprite::create("stepper-minus.png");
CCSprite *plusSprite = CCSprite::create("stepper-plus.png");
return CCControlStepper::create(minusSprite, plusSprite);
}
void ControlStepper::valueChanged(CCObject *sender, CCControlEvent controlEvent)
{
CCControlStepper* pControl = (CCControlStepper*)sender;
// Change value of label.
m_pDisplayValueLabel->setString(CCString::createWithFormat("%0.02f", (float)pControl->getValue())->getCString());
}效果如下:

4、ControlSwitch
bool ControlSwitch::init()
{
CCSize size = CCDirector::sharedDirector()->getWinSize();
CCNode* layer = CCNode::create();
layer->setPosition(ccp(size.width / 2,size.height / 2));
this->addChild(layer,1);
double layer_width = 0;
CCScale9Sprite* background = CCScale9Sprite::create("buttonBackground.png");
background->setContentSize(CCSizeMake(100,50));
background->setPosition(ccp(layer_width + background->getContentSize().width / 2.0f,0));
layer->addChild(background);
m_pDisplayValueLabel = CCLabelTTF::create("#color" ,"Marker Felt" ,30);
m_pDisplayValueLabel->retain();
m_pDisplayValueLabel->setPosition(background->getPosition());
layer->addChild(m_pDisplayValueLabel);
layer_width += background->getContentSize().width;
// Create the switch,参数分别是:滑动遮罩,on背景图,off背景图,滑动按钮,文字on,文字off
CCControlSwitch *switchControl = CCControlSwitch::create
(
CCSprite::create("switch-mask.png"),
CCSprite::create("switch-on.png"),
CCSprite::create("switch-off.png"),
CCSprite::create("switch-thumb.png"),
CCLabelTTF::create("On", "Arial-BoldMT", 16),
CCLabelTTF::create("Off", "Arial-BoldMT", 16)
);
switchControl->setPosition(ccp (layer_width + 10 + switchControl->getContentSize().width / 2, 0));
layer->addChild(switchControl);
switchControl->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlSwitch::valueChanged), CCControlEventValueChanged);
// Set the layer size
layer->setContentSize(CCSizeMake(layer_width, 0));
layer->setAnchorPoint(ccp (0.5f, 0.5f));
// Update the value label
valueChanged(switchControl, CCControlEventValueChanged);
//add mainMenu
MainMenu *mainMenu = new MainMenu();
mainMenu->mainMenu();
this->addChild(mainMenu);
return true;
}效果如下:

5、ControlSlider
bool ControlSlider::init()
{
CCSize size = CCDirector::sharedDirector()->getWinSize();
// Add a label in which the slider value will be displayed
m_pDisplayValueLabel = CCLabelTTF::create("Move the slider thumb!\nThe lower slider is restricted." ,"Marker Felt", 32);//一开始初始化的显示文字
m_pDisplayValueLabel->retain();
m_pDisplayValueLabel->setAnchorPoint(ccp(0.5f, -1.0f));
m_pDisplayValueLabel->setPosition(ccp(size.width / 1.7f, size.height / 2.0f));
addChild(m_pDisplayValueLabel);
// Add the slider,三个参数分别是:背景条,进度条,滑动按钮
CCControlSlider *slider = CCControlSlider::create("sliderTrack.png","sliderProgress.png" ,"sliderThumb.png");
slider->setAnchorPoint(ccp(0.5f, 1.0f));
slider->setMinimumValue(0.0f); // Sets the min value of range
slider->setMaximumValue(5.0f); // Sets the max value of range
slider->setPosition(ccp(size.width / 2.0f, size.height / 2.0f + 16));
slider->setTag(1);
// When the value of the slider will change, the given selector will be call
slider->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlSlider::valueChanged), CCControlEventValueChanged);
CCControlSlider *restrictSlider = CCControlSlider::create("sliderTrack.png","sliderProgress.png" ,"sliderThumb.png");
restrictSlider->setAnchorPoint(ccp(0.5f, 1.0f));
restrictSlider->setMinimumValue(0.0f); // Sets the min value of range
restrictSlider->setMaximumValue(5.0f); // Sets the max value of range
restrictSlider->setMaximumAllowedValue(4.0f);//虽然范围显示的是上面的那个范围,但实际能拖动到范围是这个数值。不理解的话想想中国的民主,很容易理解的嘛
restrictSlider->setMinimumAllowedValue(1.5f);
restrictSlider->setValue(3.0f);
restrictSlider->setPosition(ccp(size.width / 2.0f, size.height / 2.0f - 24));
restrictSlider->setTag(2);
//same with restricted
restrictSlider->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlSlider::valueChanged), CCControlEventValueChanged);
addChild(slider);
addChild(restrictSlider);
//add mainMenu
MainMenu *mainMenu = new MainMenu();
mainMenu->mainMenu();
this->addChild(mainMenu);
return true;
}
void ControlSlider::valueChanged(CCObject *sender, CCControlEvent controlEvent)
{
CCControlSlider* pSlider = (CCControlSlider*)sender;
// Change value of label.
//如果tag = 1,则是slider
if(pSlider->getTag() == 1)
m_pDisplayValueLabel->setString(CCString::createWithFormat("Upper slider value = %.02f", pSlider->getValue())->getCString());
//如果是第二个,则是restrictSlider
if(pSlider->getTag() == 2)
m_pDisplayValueLabel->setString(CCString::createWithFormat("Lower slider value = %.02f", pSlider->getValue())->getCString());
}效果如下:

好了,没了。
本文详细介绍了安卓平台上的三种UI控件:ControlStepper用于数值调整;ControlSwitch实现开关功能;ControlSlider则用来调节数值范围。通过具体实例展示了每种控件的创建、配置及事件响应过程。
9951

被折叠的 条评论
为什么被折叠?



