android listview 去掉水波纹效果_CocosCreator之分层管理的ListView

前言

进入公众号回复listview即可获得demo的git地址。

  1. 之前写的一篇文章《Creator之ScrollView那些事》中提到了官方Demo中提供的ListViewCtl,只是实现了纵向滑动,没有实现横向滑动。并且建议官方可以把功能做全然后放入组件库中供开发者使用。
  2. 然后有个牛逼大神说这个ListView不ok。要我对自己的公众号内容负责。我还以为有什么严重的bug,其实是打断了合批操作。对于官方提供的ListViewCtr的操作方式肯定会打断合批的 !不过对于一些简单的需求,比如我上次文章中的这个截图。7c34b4d317b736d4c78af0725c446197.png这样的列表需要合批吗?我的需求就是少创建几个节点就可以了。所以我觉得ok不ok还是要看需求吧!为什么tableview呼声那么高,而Laya也在官方组件中支持了ListView,已经是很好的说明了。

ListView的局限

  1. 首先,这个ListView是有局限的,它直接将Item放入了content中,肯定会打断合批操作;96dfc4d66fe84c59fbff03addecd0ef9.png如果你有一个多列多行,并且item非常复杂的需求,那么用这个ListView肯定是不合适的。就好比你用一把杀鸡的刀去杀一头牛,不悲剧才怪!所以大家在看到别人分享东西的时候建议最好不要拿来主义,而是经过分析后决定用还是不用,我相信作为程序猿,这点判断能力还是有的!

  2. 其次 ,这个ListView不支持网格显示。如果想要多行或者多列显示,需要自己在一个Item中排列好。然后自己设置每个道具的显示与隐藏,所以对于有多列显示需求的情况还是比较复杂的。

那么我先说说ListView采用的原理,然后再说说如何改进吧。

ListView采用的原理

  1. 根据可显示区域的宽或者高计算出需要创建的道具的数量。然后多加一行或者一列,避免滑动的时候显示不自然。2b206d8882ae01920e1a5cf3b7885746.png
  2. 滑动时,将离开可见区域的道具放到与滑动方向相反的一端重复使用。4839c59e91db99f491c21471e739faea.png
  3. 原理其实就这么两点,目的就是少创建节点。

支持网格显示的ListView——GridListView

  1. 首先我为之前的ListView增加了网格显示能力,代码中通过给定的spaceX和spaceY 结合可显示区域的宽或者高计算可显示的列数或者行数1814f90f9a2200f3f1b69bb053c32c41.png
  2. 如果只是做了网格显示能力而不做分层管理其实一样有局限1。虽然比你直接把道具放入content中好很多,但是dc依然很高。

支持分层管理的ListView——GridLayerListView

  1. GridLayerListView 是继承了GridListView,重写了设置坐标和添加节点的方法。9245fb3ab12e8969a12444327fef394f.png6126aba7bd7403764c008f14120e3352.png
  2. 这里的item依然被添加到了content中,只是此时的它已经没有子节点了,只是用来判断是否离开显示区域而存在的。
  3. 同时在添加item的时候给item自定义了一个LIST属性,用于保存子节点的引用,因为已经不能通过item的children数组获得子节点了。
  4. 为每个子节点自定义一个属性INIT_POS,保存本地坐标,更新位置的时候会用到。0724e39fed4138c5dbb86e7274ad1289.png
  5. 为了保证所有节点显示位置的正确性,代码中直接移除节点中存在的widget组件。2dadb42a23bcbd12aa88cdcc56787796.png
  6. 当你将一个ScrollView拖到界面上时,只需要调整ScrollView和view的宽高,代码中直接删除了默认的item节点555f33ded1fc23a877c6cc2c289166c5.png
  7. GridLayerListView并没有使用对象池,如果确实有需要可以在getItem函数中自己通过对象池获取道具。42206033709731228efb7d3f0188a59a.png
  8. 通过设置ScrollView的Horizontal 和 Vertical 改变滚动方向,同时只支持一个方向滚动。0729d95d7e08e5dbfc8d35f73a33a69f.png

使用方式

  1. 将一个ScrollView拖到界面中,挂上GridLayerListView组件1204f3fb292b59f04ded6832faa7435c.png
  2. 定义一个处理逻辑的组件挂到界面上,并在逻辑组件中声明好使用的变量和函数,设置好GridLayerListView的参数。(其实跟ListViiew的使用方式是一样的)3e5103c21e0fc0de1ec3a39ede376ab2.png
  3. 设置ScrollView 和View 的宽高,注意尤其是View的宽高,因为View大小就是可见区域,代码中会根据View的宽高判断应该显示的列数或者行数。注意列数或者行数等于宽度或者高度/(item的宽度或者高度+横向间距或者纵向间距)60697503b5c319c2c53bbc854dc186db.png

使用效果

为了看优化的效果,用到的两个纹理都去掉了Packable选项341a6aa873c951a223ad7ce7eab8be3f.png

  1. 不分层的GridListView dc=642643a619825cfb503070ab61ad46375c.png在不分层管理的情况下,道具中的label是否设置为Char模式dc都是一样的。
  2. 分层+Label不为Char模式 dc=234b9360eb212326a4274222310a7e8195.png
  3. 分层+Label为Char模式 dc=9b1496dccdee7a46301ed48f9d7cccdf8.png
  4. 道具的预制体结构673526c4e477d9537ee30ea747659825.png
  5. 道具使用情况7cf523b62b91723c3fe696fa12f33456.png根据后台输出可以看出,一共有35个需要显示的道具,实际上只创建了3 x5 = 15个道具就搞定了,即使有再多需要显示的道具,也只用这15个道具。
  6. dc 从64 减少到9,依然用上了ListView少创建,重复利用的原理,只是加上分层管,达到了这样的效果,还算过得去吧。

结语

  1. 以上是我在之前的ListView基础上添加了网格显示,分层管理等能力后写出来的新组件,我给它起名叫GridLayerListView,是因为它是一个支持网格显示,分层管理节点的ListView。一个既可以杀鸡也可以杀牛的刀。就是对ListView情有独钟,没办法了。
  2. 我并没有说这个是最优的方案,也不保证没有bug(我还不是一个敢说自己写的东西没bug的牛人),思想仅供参考,大神可以绕道。如果你想将dc降到更低,那么你还需要做一些其他的优化。建议阅读文弱书生陈皮皮的《Cocos Creator 性能优化:DrawCall》

进入公众号回复listview即可获得demo的git地址。

欢迎扫码关注公众号《微笑游戏》,浏览更多内容。如果您觉得文章还可以,点赞、在看、分享、赞助都是对我最大的鼓励,在下将感激不尽。

5133fcbbb2063517224ee457c0992c92.png
微信图片_20190904220029.jpg

更多内容

跨引擎游戏开发框架

小游戏SDK整合框架

使用四叉树优化碰撞检

游戏开发中UI管理器的使用

小游戏开发中如何优雅的使用本地存档

sdk接入整合,用一个变量切换不同渠道

CocosCreator之AssetBundle使用方案分享

CocosCreator之填色游戏的一种实现方案

一个可屏蔽长短链接的网络模块

游戏开发中的人工智能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】电大中专微生物与寄生虫基础 (2)_1作业 题库

1.属于真核型微生物的是()。 A.衣原体 B.放线菌 C.真菌 D.病毒 E.支原体 错误 正确答案:左边查询 学生答案:B 2.下列哪一个特点不是微生物的共有特点() A.结构简单 B.肉眼不直接可见 C.需要借助显微镜观察 …

小米小爱蓝牙音箱_UG绘制一个小米小爱同学蓝牙音箱

今天来绘制这么一个小米蓝牙音箱,渲染后的效果如下建模步骤:1打开UG,首先绘制一个直径为135mm的圆拉伸80mm。2在XZ平面上绘制草图,以Y轴旋转360度求差3整体抽壳2mm4继续在拉伸面上绘制这么一个大概的草图5选择草图的小圆&#xff…

J2Pay –完整示例

介绍 在本节中,我们将详细探讨如何使用网关并成功调用所有四种方法,即购买,退款,作废和重新计费。 对于此示例,我们将使用授权网关。 让我们开始。 首先,我们将获得Authorize网关对象。 Gateway gateway…

ajax17,17个使用AJAX技术的数据表格控件

为了将数据高效的展示出来,数据需要有合适的结构,展现结构设计的越好,用户就越容易理解信息的内容。因此,提高数据的可萃取性和可扫描性非常有意义。表,是一个非常好的数据呈现结构,非常便于人们分析和理解…

【渝粤教育】电大中专测量学 (5)作业 题库

1.测量学是研究地球的形状和大小以及确定地面点()位置的科学。 A.平面 B.空间 C.曲面 D.高程 错误 正确答案:左边查询 学生答案:A 2.测量学中的水准面是一个()。 A.斜平面 B.水平面 C.竖直面 D.曲面 正确 正…

【渝粤教育】电大中专电商运营实操 (25)作业 题库

电子商务最重要的是() A商务 B网站 C信息技术 D货物 正确 正确答案:左边查询 学生答案:A 2下列关于电子商务的特点叙述错误的是() A全球性 B简单的电子化支付手段 C交易环节多,营销成本高 D信息…

tx2无法识别网络_织点智能算法大牛刘思伟:商品识别在收银结算场景的应用与落地...

线下门店消费越快捷、过程越便利,就越能吸引顾客的二次购物。相较于传统的人工收银方式,使用自助收银设备不仅可以减少顾客排队等候的时间,提升收银效率,同时对经营者来说,可以有效降低人工成本。目前,市面…

windows服务器网站日志,windows服务器网站日志文件

windows服务器网站日志文件 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。网页防篡改可实时监控网站目录,并通过备份恢…

【渝粤教育】电大中专电子商务网站建设与维护 (4)作业 题库

1.阿里巴巴的盈利项目主要是哪些( ) A.委托设计公司网站 B.诚信通 C.以上都正确 D.中国供应商 E.网上推广项目 错误 正确答案:左边查询 学生答案:未作答 2.阿里巴巴目前的电子商务在哪个阶段( ) A.信息流 B…

初始化创建画布_使用HTML5,画布和开放数据创建全球降水(雨)可视化

初始化创建画布我目前正在为Three.js编写下一本书,其中一章涉及可视化开放数据。 在寻找可以使用的数据时,我遇到了来自NOAA的一组数据。 通过此站点,您可以以网格格式下载一组全世界的每月降水报告。 因此,我下载了它们&#xff…

【渝粤教育】电大中专药品储存与养护技术 (2)作业 题库

1.在能够预见到某种药品经过短时间储存易发生质量变化时,该种药品的出库原则是()。 A.近效期先出 B.先产先出 C.先进先出 D.易变先出 错误 正确答案:左边查询 学生答案:B 2.药品批准文号的格式为(&#xff…

星之卡比镜之迷宫机器人_机器人工程师入门(0)

前言:多年前看到一片知乎文章YY硕:机器人工程师学习计划​zhuanlan.zhihu.com当时看到这个,只觉醍醐灌顶,能看到有如此详尽的关于机器人工程师的个人技术发展规划,又不禁觉得有些遗憾,因为这个规划是本科大…

8代主板装服务器系统,微星B365主板搭配intel 8代cpu安装win7及bios设置教程

就在前不久发布华硕和华擎分别发布了b365主板,近期微星也发布了b365主板,有很多使用微星主板的网友问,微星B365主板其搭载intel 酷睿8代cpu可以安装安装win7吗?微星B365主板预装的是win10系统,用户还是喜欢win7系统&am…

【渝粤教育】电大中专计算机职业素养 (12)作业 题库

1.( )就是职业技能的标准化、规范化、制度化。 A.职业行为 B.职业意识 C.职业道德 D.职业化 错误 正确答案:左边查询 学生答案:未作答 2.( )就是合适的时间、合适的地点、做合适的事 A.职业意识 B.职业习惯…

修订和不变性

这是一个简短的帖子。 我不确定如何启动它。 这是审阅一些现有代码时“为什么我没有想到”的时刻之一。 由于存在NDA,我无法共享实际代码。 它与处理修订有关。 与我最相关的是WordPress(WP)如何处理博客文章和修订。 在WP中, wp…

[渝粤教育] 西南科技大学 农业推广学 在线考试复习资料

农业推广学——在线考试复习资料 一、单选题 1.“ 百千万”示范是指在村建百亩( )。 A.示范片 B.试验田 C.示范区 D.示范方 2.一个随机区组试验有8个处理,四次重复,误差自由度是( )。 A.27 B.21 C.32 D.28 3.在推广教师的指导下,学员运用已有的知识、经验,从事一定的实践工作…

autowired注入为 mapper为null_兰新高铁为区域经济发展注入活力

央视网消息 :连接甘肃兰州至新疆乌鲁木齐的兰新高铁,是我国“八纵八横”高速铁路网的重要组成部分。开通运营近六年来,兰新高铁已累计运输旅客6760多万人次,在推动地区协调发展,便捷旅客出行等方面发挥了重要作用。乘坐…

[渝粤教育] 西南科技大学 制造业信息化导论 在线考试复习资料

制造业信息化导论——在线考试复习资料 一、单选题 1.产品设计应面向( ),与用户保持密切联系,将用户纳入产品开发过程,以多变的产品、尽可能短的交货期来满足用户的需要。 A.用户 B.供应商 C.销售商 D.物流 2.企业的生产、经营状况可通过其产品结构、产值产量、经营总额、利税…

织梦同步静态文件到服务器,某猫织梦插件-织梦dedecms静态文件生成速度的区块插件...

经常使用织梦的朋友都可能都知道织梦cms 的静态生成速度有时候让人无法忍受;如果是企业展的几百篇的文章,那当然绰绰有余,但是一般数据量打起来生成速度也会大幅的降低,与同类的其他cms比如说帝国cms,还有phpcms相比差…

[渝粤教育] 西南科技大学 动态网页设计(JSP) 在线考试复习资料

动态网页设计(JSP)——在线考试复习资料 一、单选题 1.下面关于通过JDBC访问数据库哪项说明正确? A.对数据库操作一定要驱动程序 B.对数据库操作一定要DriverManager.getConnection C.对数据库操作一定要ResultSet对象 D.对数据库的操作一定要调用存储 …