listView顶部偏移

来源:互联网 发布:合肥美工 编辑:程序博客网 时间:2024/05/16 15:14

主要思想:

源代码中 listview第一个cell排版位置默认偏移为0

所以只需在排版时给第一个cell一个偏移posSet值即可 

在uilistview.h中添加

 void setPosSet(float posSet);     float getPosSet();
 float _posSet;
<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
然后在uiListView中修改

函数实现

void ListView::setPosSet(float posSet){    if (_posSet == posSet) {        return;    }    _posSet = posSet;    _refreshViewDirty = true;}float ListView::getPosSet(){    return _posSet;        }


修改初始值

ListView::ListView():_model(nullptr),_gravity(Gravity::CENTER_VERTICAL),_itemsMargin(0.0f),_curSelectedIndex(0),_refreshViewDirty(true),_listViewEventListener(nullptr),_listViewEventSelector(nullptr),<strong><span style="color:#ff6666;">_posSet(0.0f),</span></strong>

设置内容的大小

void ListView::updateInnerContainerSize(){    switch (_direction)    {        case Direction::VERTICAL:        {            size_t length = _items.size();            <strong>float totalHeight = (length - 1) * _itemsMargin+<span style="color:#ff6666;">2*_posSet</span></strong>;            for (auto& item : _items)            {                totalHeight += item->getContentSize().height;            }            float finalWidth = _contentSize.width;            float finalHeight = totalHeight;            setInnerContainerSize(Size(finalWidth, finalHeight));            break;        }        case Direction::HORIZONTAL:        {            size_t length = _items.size();            <strong>float totalWidth = (length - 1) * _itemsMargin+<span style="color:#ff6666;">2*<span style="font-family: Arial, Helvetica, sans-serif;">_posSet</span></span></strong><span style="font-family: Arial, Helvetica, sans-serif;">;</span>            for (auto& item : _items)            {                totalWidth += item->getContentSize().width;            }            float finalWidth = totalWidth;            float finalHeight = _contentSize.height;            setInnerContainerSize(Size(finalWidth, finalHeight));            break;        }        default:            break;    }}    
修改竖向偏移

void ListView::remedyVerticalLayoutParameter(LinearLayoutParameter* layoutParameter, ssize_t itemIndex){    CCASSERT(nullptr != layoutParameter, "Layout parameter can't be nullptr!");        switch (_gravity)    {        case Gravity::LEFT:            layoutParameter->setGravity(LinearLayoutParameter::LinearGravity::LEFT);            break;        case Gravity::RIGHT:            layoutParameter->setGravity(LinearLayoutParameter::LinearGravity::RIGHT);            break;        case Gravity::CENTER_HORIZONTAL:            layoutParameter->setGravity(LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL);            break;        default:            break;    }        if (0 == itemIndex)    {        //layoutParameter->setMargin(Margin::ZERO);        <span style="color:#ff6666;"><strong>layoutParameter->setMargin(Margin(0, _posSet, 0.0f, 0.0f));</strong></span>    }    else    {        layoutParameter->setMargin(Margin(0.0f, _itemsMargin, 0.0f, 0.0f));    }}
修改横向偏移

void ListView::remedyHorizontalLayoutParameter(LinearLayoutParameter* layoutParameter, ssize_t itemIndex){    CCASSERT(nullptr != layoutParameter, "Layout parameter can't be nullptr!");        switch (_gravity)    {        case Gravity::TOP:            layoutParameter->setGravity(LinearLayoutParameter::LinearGravity::TOP);            break;        case Gravity::BOTTOM:            layoutParameter->setGravity(LinearLayoutParameter::LinearGravity::BOTTOM);            break;        case Gravity::CENTER_VERTICAL:            layoutParameter->setGravity(LinearLayoutParameter::LinearGravity::CENTER_VERTICAL);            break;        default:            break;    }    if (0 == itemIndex)    {        <strong><span style="color:#ff6666;">layoutParameter->setMargin(Margin(_posSet, 0.0f, 0.0f, 0.0f));</span></strong>    }    else    {        layoutParameter->setMargin(Margin(_itemsMargin, 0.0f, 0.0f, 0.0f));    }}


导出为lua接口

int lua_cocos2dx_ui_ListView_setPosSet(lua_State* tolua_S){    int argc = 0;    cocos2d::ui::ListView* cobj = nullptr;    bool ok  = true;#if COCOS2D_DEBUG >= 1    tolua_Error tolua_err;#endif#if COCOS2D_DEBUG >= 1    if (!tolua_isusertype(tolua_S,1,"ccui.ListView",0,&tolua_err)) goto tolua_lerror;#endif    cobj = (cocos2d::ui::ListView*)tolua_tousertype(tolua_S,1,0);#if COCOS2D_DEBUG >= 1    if (!cobj)     {        tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_ui_ListView_setPosSet'", nullptr);        return 0;    }#endif    argc = lua_gettop(tolua_S)-1;    if (argc == 1)     {        double arg0;        ok &= luaval_to_number(tolua_S, 2,&arg0, "ccui.ListView:setPosSet");        if(!ok)        {            tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_ui_ListView_<span style="font-family: Arial, Helvetica, sans-serif;">setPosSet</span><span style="font-family: Arial, Helvetica, sans-serif;">'", nullptr);</span>            return 0;        }        cobj->setPosSet(arg0);        lua_settop(tolua_S, 1);        return 1;    }    luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "ccui.ListView:setPosSet",argc, 1);    return 0;#if COCOS2D_DEBUG >= 1    tolua_lerror:    tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_ui_ListView_setPosSet'.",&tolua_err);#endif    return 0;}

int lua_cocos2dx_ui_ListView_getPosSet(lua_State* tolua_S){    int argc = 0;    cocos2d::ui::ListView* cobj = nullptr;    bool ok  = true;#if COCOS2D_DEBUG >= 1    tolua_Error tolua_err;#endif#if COCOS2D_DEBUG >= 1    if (!tolua_isusertype(tolua_S,1,"ccui.ListView",0,&tolua_err)) goto tolua_lerror;#endif    cobj = (cocos2d::ui::ListView*)tolua_tousertype(tolua_S,1,0);#if COCOS2D_DEBUG >= 1    if (!cobj)     {        tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_ui_ListView_getPosSet'", nullptr);        return 0;    }#endif    argc = lua_gettop(tolua_S)-1;    if (argc == 0)     {        if(!ok)        {            tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_ui_ListView_getPosSet'", nullptr);            return 0;        }        double ret = cobj->getPosSet();        tolua_pushnumber(tolua_S,(lua_Number)ret);        return 1;    }    luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "ccui.ListView:getPosSet",argc, 0);    return 0;#if COCOS2D_DEBUG >= 1    tolua_lerror:    tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_ui_ListView_getPosSet'.",&tolua_err);#endif    return 0;}




0 0
原创粉丝点击