cocos2dx ListView or ScrollView to SCROLL_TO_BOTTOM doubel call to solve

当功能需求上需要使用动态去加载  item 的时候,我想到的第一个方法就是当listview滑动到底部的时候再动态的创建出一部分 item 控件。但是有个很蛋疼的事情,直接调用


ListView:addScrollViewEventListener( function ( sender, eventType )
    if evenType == ccui.ScrollviewEventType.scrollToBottom then
        print( "callback func" );
    end
end );


然后当滑动到最下面的时候就一直打印一直打印。。。蛋疼。
于是我便相处了另一个方案:利用监听点击事件去处理这个逻辑


ListView:addTouchEventListener(function (sender, eventType)
    if eventType == ccui.TouchEventType.ended then
        local eInnerPos = ListView:getInnerContainerPosition();
        --// 偏移量 20 个像素
        if eInnerPos.y >= 20 then
            print( "------ call back function" );
        end
    end

end );



还有一个一劳永逸的方法,给 scrollview 加一个成员函数。在 UIScrollView.lua 文件里的  scrollview 类加入成员函数

function ScrollView:addScrollViewMoveSideCallFunc( callback )
    local InnerSize = self:getInnerContainerSize();
    local ContentSize = self:getContentSize();
    self:addTouchEventListener( function ( sender, TouchEventType )
        if TouchEventType == ccui.TouchEventType.ended then
            local eInnerPos = self:getInnerContainerPosition();
            local topOffY = ((InnerSize.height-ContentSize.height)*-1);
            if eInnerPos.y <= topOffY-20 then
                callback( "SCROLL_TO_TOP" );
            elseif eInnerPos.y >= 20 then
                callback( "SCROLL_TO_BOTTOM" );
            end
        end
    end );
end


可恨啊。放进去懂东西把点击事件给拦截了。。。。导致触发不了。。。于是临时想了另一种方法,在list的父控件上加一个跟list大小一样位置一样的 layout。点击事件在 layout 上去触发。

function ScrollView:addScrollViewMoveSideCallFunc( callback )
    local ContentSize = self:getContentSize();
    local EventLayout = ccui.Layout:create();
    EventLayout:setTouchEnabled( true );
    EventLayout:setContentSize( ContentSize );
    local Parent = self:getParent();
    local svPosX = self:getPositionX();
    local svPosY = self:getPositionY();
    EventLayout:setPosition( svPosX - ContentSize.width / 2, svPosY - ContentSize.height / 2 );
    Parent:addChild( EventLayout, self:getLocalZOrder() );
    EventLayout:setSwallowTouches( false );
    EventLayout:addTouchEventListener( function ( sender, TouchEventType )
        if TouchEventType == ccui.TouchEventType.ended then
            local InnerSize = self:getInnerContainerSize();
            local eInnerPos = self:getInnerContainerPosition();
            local topOffY = ((InnerSize.height-ContentSize.height)*-1);
            if eInnerPos.y <= topOffY-20 then
                callback( "SCROLL_TO_TOP" );
                print("----- SCROLL_TO_TOP end -----");
                return;
            elseif eInnerPos.y >= 20 then
                callback( "SCROLL_TO_BOTTOM" );
                print("----- SCROLL_TO_BOTTOM end -----");
                return;
            end
        end
        callback( "NOT_DEFINE" );
    end );
end


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值