当前位置: 首页 > wzjs >正文

山西专业网站建设价目东莞软件有限公司

山西专业网站建设价目,东莞软件有限公司,网站系统名称怎么填,mysql数据库建设网站之前已经实现过: Unity 中实现可复用的 ListView-CSDN博客文章浏览阅读5.6k次,点赞2次,收藏27次。源码已放入我的 github,地址:Unity-ListView前言实现一个列表组件,表现方面最核心的部分就是重写布局&…

之前已经实现过:

Unity 中实现可复用的 ListView-CSDN博客文章浏览阅读5.6k次,点赞2次,收藏27次。源码已放入我的 github,地址:Unity-ListView前言实现一个列表组件,表现方面最核心的部分就是重写布局(Layout)。对于简单的列表,尤其是“Cell数量固定且较少、没有超页滚动展示”一类的需求,使用UGUI自带的布局组件进行布局即可。分别为:水平布局组件(Horizontal Layout Group)、竖直布局组件(Vertical Layout Gro..._unity listview https://blog.csdn.net/NRatel/article/details/100561203Unity 中实现可复用的 GridView-CSDN博客文章浏览阅读4k次。本文介绍了如何基于Unity的UGUI系统设计一个灵活的GridView组件。作者分析了GridLayoutGroup的参数,讨论了StartCorner和StartAxis的排布方式、Constraint的灵活性以及Padding与对齐方式的巧妙结合。在实现过程中,修改了ScrollRect的关联ScrollBar和布局接口,设计了适应不同滑动方向的布局,并实现了元素复用逻辑,包括四种滑动方向的计算。此外,还探讨了Content锚点、行列约束和对齐方式的调整,以提高组件的易用性。 https://blog.csdn.net/NRatel/article/details/124063559首尾无限循环 的列表,还是以 ListView 为基础。

在此之前,先参照 GrideView 修改 ListView:

使其 继承 UIScrollRect(原因是必须修改部分源码)

并支持参数:

1、MovementAxis :
        横向滑动 或 竖向滑动。

2、StartSide :
        横向滑动时,可选 元素的排列方向:从左往右 或 从右往左;
        竖向滑动时,可选 元素的排列方向:从上往下 或 从下往上。

3、ChildAligment :
        横向滑动时,可选 元素的上下对齐方式:居上/居中/居下;
        竖向滑动时,可选 元素的左右对齐方式:居左/居中/居右。

----------------------------------------- NRatel割 -----------------------------------------

Loop 首尾循环的改动要点:
(以下仅以 MovementAxis=Horizontal,StartSide=Left 的情形阐述)

先看这种情况:核心内容宽度 > viewport 宽度

1、使 Content 在移动时,非原核心内容区也能够显示 0~Count-1 范围内的 Cell元素,让越界索引不要提前retrun,而是在显示时转到 0~Count-1 之中。

如图:黑色区域为 Content, 当其继续往右滑动时,进入Viewport、但已超出 Content 的部分,仍能生成越界元素,并能将越界索引转到 界内索引之中。

需要修改 CalcIndexes,使其不要立刻拦截越界索引。而是在 DisAppearCells 和 AppearCells 时,根据 索引值判断是否越界,抽出两个方法:

//是否有效索引(只将显示索引显示到列表中,默认为 0~cellCount 之间)
//loop时,认为任意索引都是有效的,以使非 0~cellCount 的区域能够显示元素,之后再在 ConvertIndexToValid 转换
protected virtual bool IsValidIndex(int index)
{if (m_Loop) { return true; }else { return index >= 0 && index < m_CellCount; }
}
//转换索引至有效(默认无需处理)
//loop时,将任意索引数转到 [0~cellCount-1] 中
protected virtual int ConvertIndexToValid(int index)
{if (m_Loop) { return (index % m_CellCount + m_CellCount) % m_CellCount; }else { return index; }
}

处理完本条之后,理论上,将 Content的宽度设为 无限大,就可以直接支持首尾无限循环。
不过,最好还是选择位置重置的方案。

2、滑动时,从初始位置开始,只要向左/向右滑出超过1个重置单位,就将 Content 重置回起始位置。
(注意,滑动过程,完全无需考虑Cell显示问题,完全由①处理,可将Content想象为一张整图)
(注意这里说的 1个重置单位 = 1核心内容宽度 + 1个spacingX)

3、将 Content 宽度扩为原核心内容宽度扩展的N倍,使其满足位置重置的基本条件。

        支持从初始位置开始,向左向右各滑动1个重置单位,需要在两侧至少各扩展出1个重置单位。
        但为了避免 翻超1个重置单位触及边缘 触发回弹,可以额外多出1或2个重置单位。
        注意,扩宽 Content 更多倍是毫无成本的!这里只是思考至少应该扩展几倍。
        所以,直接定为 2+2=4倍。

4、再回头来思考 核心内容宽度 < viewport宽度 的倍数

        在上面的基础上,只需简单处理:将 核心内容宽度 先翻倍,使超过 viewport宽度。
        注意,这种情况下,在Viewport中会出现多个同一Cell,属于正常现象。

5、重置Content位置。但小心不能影响到 ScrollRect 内部的 速度值计算!!!

        我用了不少时间才解决这个问题。

        位置的重置,不能放在 OnScrollValueChanged。原因是:

        ①、ScrollRect 的 LateUpdate中,有逻辑为:
        开启惯性速度选项,进行拖拽时,会根据Content相邻两帧的 位置确定后续的 惯性起始速度。

        因此,如果在滑动过程中,如果只突然修改 Content 位置,将会导致 速度剧变

        ②、在 OnScrollValueChanged 修改 Content 位置过晚,将使 其他注册 OnScrollValueChanged 的地方无法获取的真实 value。

        因此,可在 SetContentAnchoredPosition 方法中,增加一个虚方法,供子类重写修改Content 的位置。

        在具体修改Content位置时,还需注意:

        ①、要同时更新 m_PrevPosition,以使本帧 LateUpdate中 计算的 m_Velocity 不会因位置剧变而剧变。

        ②、要同时更新 m_ContentStartPosition,以使 OnDrag 中,Content位置跟随鼠标移动时,不反复触发此“位置超过一页的重置逻辑”,否则下一帧 m_PrevPosition 又将执行一次偏移(上一行代码),还是会导致速度剧变。

//Content初始位置
float contentStartPosX = -m_CellStartOffsetOnMovementAxis;
//获取当前位置
float curContentPosX = m_Content.anchoredPosition.x;
//Content向左时,Content重置点坐标(初始位置左侧1个重置宽度)
float leftResetPosX = contentStartPosX - m_LoopResetSizeOnMovementAxis;
//Content向右时,Content重置点坐标(初始位置右侧1个重置宽度)
float rightResetPosX = contentStartPosX + m_LoopResetSizeOnMovementAxis;
if (curContentPosX < leftResetPosX)
{m_Content.anchoredPosition += Vector2.right * m_LoopResetSizeOnMovementAxis;//更新,以使本帧 LateUpdate中 计算的 m_Velocity 不会因位置剧变而剧变m_PrevPosition += Vector2.right * m_LoopResetSizeOnMovementAxis;//更新,以使 OnDrag 中,Content位置跟随鼠标移动时,不反复触发此“位置超过一页的重置逻辑”,否则下一帧m_PrevPosition又将执行一次偏移(上一行代码),还是会导致速度剧变m_ContentStartPosition += Vector2.right * m_LoopResetSizeOnMovementAxis;
}
else if (curContentPosX > rightResetPosX)
{m_Content.anchoredPosition += Vector2.left * m_LoopResetSizeOnMovementAxis;//更新,以使本帧 LateUpdate中 计算的 m_Velocity 不会因位置剧变而剧变m_PrevPosition += Vector2.left * m_LoopResetSizeOnMovementAxis;//更新,以使 OnDrag 中,Content位置跟随鼠标移动时,不反复触发此“位置超过一页的重置逻辑”,否则下一帧m_PrevPosition又将执行一次偏移(上一行代码),还是会导致速度剧变m_ContentStartPosition += Vector2.left * m_LoopResetSizeOnMovementAxis;
}

----------------------------------------- NRatel割 -----------------------------------------

实现效果:

源码:

https://github.com/NRatel/Unity-ListViewhttps://github.com/NRatel/Unity-ListView


文章转载自:

http://cYdI9WCN.ybgpk.cn
http://M0xhCCg5.ybgpk.cn
http://kHYG4PCi.ybgpk.cn
http://1ViRo8Ea.ybgpk.cn
http://LEnDIfXl.ybgpk.cn
http://vtH64utL.ybgpk.cn
http://gOkgmk3t.ybgpk.cn
http://Co55tF9f.ybgpk.cn
http://VZ8ACYKQ.ybgpk.cn
http://Fj23wwUp.ybgpk.cn
http://PPDYzARV.ybgpk.cn
http://H9OabcLL.ybgpk.cn
http://hl3l4DFE.ybgpk.cn
http://8VvLIxTD.ybgpk.cn
http://XJaEn3hw.ybgpk.cn
http://kv1FPq0o.ybgpk.cn
http://6QUaeoEq.ybgpk.cn
http://f05RUe1t.ybgpk.cn
http://zqgZUvDb.ybgpk.cn
http://XPv72wJV.ybgpk.cn
http://atb2S9bo.ybgpk.cn
http://X70k5YqC.ybgpk.cn
http://VubHwTRC.ybgpk.cn
http://gM8TPdhH.ybgpk.cn
http://crgYxQ8Y.ybgpk.cn
http://LPpeDHpQ.ybgpk.cn
http://RjLXQlkE.ybgpk.cn
http://VOupWqJe.ybgpk.cn
http://ruqp1hYl.ybgpk.cn
http://pkXWm5Pz.ybgpk.cn
http://www.dtcms.com/wzjs/632520.html

相关文章:

  • 广州建网站公司排名app软件开发公司哪家好
  • 河北城乡住房建设厅网站做服装团购网站
  • 支持微信支付的网站开发网站关键词排名服务
  • 设计商城商务网站茂名高端模板建站
  • 汕头做网站公司凡科网站建设平台
  • 国外做名片的网站太原seo外包公司
  • 上虞宇普电器网站建设专注七星彩网站开发
  • 空间 网站wordpress有哪些好模版
  • 网站建设公司龙头哪个网站做签约设计师比较好
  • 网站制作的详情表建筑工程网格优化
  • 七牛直播网站怎么做动易网站系统
  • 网站目录提交wordpress翻译文件
  • 在线阅读网站开发教程wordpress 获取文章id
  • 自己如何建企业网站基于flash网站设计
  • wordpress搭建学校网站山东集团网站建设
  • 网站 数据备份太原学网站开发的学校
  • 阿里巴巴网站的营销策略公司如何建设网站首页
  • 网站开发外包协议会员制网站建设
  • 微信 分享网站开发找人给公司做网站去哪找
  • 做自己的卡盟网站烟台企业网站开发
  • 陵水网站建设费用中国核工业第五建设有限公司官网
  • 舟山网站建设代理企业是做app还是做网站
  • 自己做的网站是怎么赚钱吗网页版微信登录不了怎么回事
  • 网站建设合同中英文wordpress入门主题
  • 网站建设销售话术900句单页网站在线制作
  • 成立网站开发公司jsp网站开发四 酷 全书源码
  • 专业建设购物网站网站备案查询系统
  • 学校asp网站河北公共资源交易服务平台
  • 电子商务网站建设与管理习题答案常见的渠道推广方式有哪些
  • 如何删除网站备案号网络seo啥意思