Dx中实现滚动条分页

Dx中实现滚动条分页

一、滚动条分页

界面展示第n页前的数据,当用户需要查看第n+1页数据时,界面再去加载n+1页的数据

二、原理

利用界面单元格绘制事件,界面单元格绘制绘制当前展示界面的所有单元格,如果当前的行数超过了需要查询下一条的条件(暂定为当前数据的5/6),就去查询下一页的数据,添加到现有的界面数据中。

实现

1.添加滚动下拉事件

((GridView)grid.MainView).CustomDrawCell += new DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventHandler(GridCreator_CustomDrawCell);

 

        /// grid下拉事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void GridCreator_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
        {
            try
            {
                if (this.IsUpdatingData || this.IsGridSorting ||  grid.MainView.RowCount * 5 / 6 > e.RowHandle + 1 || data_list.Count >= row_count)
                {
                    return;
                }                
                
                page_num++;
                GetData();

            }
            catch (Exception ee)
            {
                Program.MsgBoxError(ee);
            }
        }
  

 

实现 scrollView 的无限滚动,可以通过以下步骤: 1. 创建一个 scrollView,并将其滚动方向设置为水平(或垂直)方向。 2. 在 scrollView 添加若干个节点,这些节点将作为滚动的内容。 3. 在 scrollView 添加两个额外的节点,它们分别是第一个节点的复制和最后一个节点的复制。这些节点将用于实现无限滚动的效果。 4. 在 scrollView 的回调函数,判断当前滚动的位置,如果滚动到了第一个节点或最后一个节点的复制,就将 scrollView 的位置设置到对应的节点上,从而实现无限滚动的效果。 下面是一个简单的示例代码,演示了如何实现 scrollView 的无限滚动: ```c++ // 创建 scrollView auto scrollView = cocos2d::ui::ScrollView::create(); scrollView->setDirection(cocos2d::ui::ScrollView::Direction::HORIZONTAL); scrollView->setContentSize(cocos2d::Size(600, 200)); scrollView->setInnerContainerSize(cocos2d::Size(1200, 200)); addChild(scrollView); // 添加节点 for (int i = 0; i < 5; i++) { auto node = cocos2d::LayerColor::create(cocos2d::Color4B(0, 255, 0, 255), 200, 200); node->setPosition(i * 200, 0); scrollView->addChild(node); } // 添加节点的复制 auto firstNode = scrollView->getChildren().at(0); auto lastNode = scrollView->getChildren().at(scrollView->getChildrenCount() - 1); auto firstNodeCopy = firstNode->clone(); firstNodeCopy->setPosition(lastNode->getPositionX() + 200, 0); scrollView->addChild(firstNodeCopy); auto lastNodeCopy = lastNode->clone(); lastNodeCopy->setPosition(firstNode->getPositionX() - 200, 0); scrollView->addChild(lastNodeCopy); // scrollView 的回调函数 scrollView->addEventListener([=](cocos2d::Ref* sender, cocos2d::ui::ScrollView::EventType eventType) { if (eventType == cocos2d::ui::ScrollView::EventType::CONTAINER_MOVED) { auto position = scrollView->getInnerContainerPosition(); if (position.x < -200) { auto lastNode = scrollView->getChildren().at(scrollView->getChildrenCount() - 2); scrollView->setInnerContainerPosition(cocos2d::Vec2(lastNode->getPositionX() + 200, 0)); } else if (position.x > 1000) { auto firstNode = scrollView->getChildren().at(1); scrollView->setInnerContainerPosition(cocos2d::Vec2(firstNode->getPositionX() - 200, 0)); } } }); ``` 在上面的代码,我们创建了一个水平方向的 scrollView,并添加了 5 个绿色的节点。然后,我们在 scrollView 添加了第一个节点和最后一个节点的复制,分别为 firstNodeCopy 和 lastNodeCopy。在 scrollView 的回调函数,我们通过判断 scrollView 的位置,来实现对滚动位置的调整,从而实现了无限滚动的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值