cocos2dx中的ScrollView


ScrollView由視窗區域(裁剪區域)和內容區域組成,內容區域叫innerContainer。

視窗區域范圍:get/setContentSize

內容區域:get/setInnerContainerSize,

ScrollView怎樣排版?對ScrollView而言,innerContainer就是一個大矩形,這個矩形的范圍就是滾動的范圍,如果內容寬大於視窗 innerContainer則可以在x向移動。同理決定是否可在y向移動。

移動范圍是多少?移動范圍是0對應innerContainer的上(左)邊緣位於視窗區域的上(左)邊緣,1對應innerContainer的下(右)邊緣位於視窗區域的下(右)邊緣。

ScrollView中的物體怎樣定位?0,0點是innerContainer的anchor點,不經過設置的話是在其中心。

 

因此,正確的ScrollView中的內容填充是這樣的:

1 計算好內容的大小(寬高)

2 對內容進行排布,anchor為(0.5, 0.5)時,在(-0.5大小,0.5大小)的范圍內排布。

3 排布完成,調用scrollView->setInnerContainerSize將內容大小設置進去。

 

ScrollView中的按鈕不觸發點擊事件的方法:

1 設置isSwallowTouch(false),否則在按鈕上拖動不會拖動ScrollView。

2 設置點擊事件不要用addClickHandler,而是addTouchEventListener,用lambda表達式這么寫:

bool moved = false;
btn->addTouchEventListener([this, moved](Ref*, Widget::TouchEventType type) mutable {
            switch(type)
            {
                case Widget::TouchEventType::BEGAN:
                    moved = false;
                    break;
                case Widget::TouchEventType::MOVED:
                    moved = true;
                    break;
                case Widget::TouchEventType::ENDED:
                    if(!moved)
                        this->onClick();
                    break;
                default:
                    break;
            }
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM