cocos2dx ListView or ScrollView to SCROLL_TO_BOTTOM doubel c
发布时间:2020-12-14 17:23:25 所属栏目:百科 来源:网络整理
导读:当功能需求上需要使用动态去加载 item 的时候,我想到的第一个方法就是当listview滑动到底部的时候再动态的创建出一部分 item 控件。但是有个很蛋疼的事情,直接调用 ListView:addScrollViewEventListener( function ( sender,eventType ) if evenType == ccu
当功能需求上需要使用动态去加载 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |