lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 7912|回复: 1

详细介绍一下新组件LListView

[复制链接]

37

主题

8

好友

9304

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

发表于 2015-12-21 16:02:08 |显示全部楼层
LListView列表是1.10.0中的新组件,列表功能还是很常用的,在此之前,我一般会用LScrollBar来做,但是LScrollBar不是为了单纯的显示一个列表,所以就有很多朋友反应,LScrollBar并不友好,我也曾试着改良LScrollBar,但是最后发现,单纯的列表功能,还是有个专门的组件会更方便一些,而我在某款游戏中因为要显示几百条的列表,虽然不显示的子项可以不显示,但是这个地方如果没有很好的处理,游戏直接就垮掉了。如果我应要用现有的LScrollBar来做这个列表的话,需要调整的地方就很多了,所以为了也给其他开发者提供方便,新组件LListView就诞生了。
因为LListView开发的前提就是为了显示列表,而功能上我又借鉴了Unity强大的NGUI组件,所以如果要显示列表的话,相信LListView在一定程度上能帮到大家。

首先,性能上,为了尽量的提升LListView的性能,LListView在实际显示的时候,只有一个LBitmapData对象,处在显示范围内的所有列表子项,都会通过copyPixels绘制到这个唯一的LBitmapData对象上,这样就保证了LListView在显示过程中,使用保持只有一个LBitmapData对。而需要注意的是,为了提升列表滚动时的绘制效率,每个子项在绘制到LListView的LBitmapData中的时候,都会自动利用cacheAsBitmap进行缓存处理,这样提升了效率,但是子项在改变时,必须通过updateView来刷新自身才能表现在画面上。

下面具体来谈一谈功能,

一,添加删除子项
LListView通过insertChildView添加一个子项,或者通过updateList来添加一组子项。通过deleteChildView来删除子项
demo测试
http://lufylegend.com/api/api/ui/LListView.html

二,LListView的显示范围大小
clipping是一个LRectangle对象,它的大小,就是LListView的显示范围,你可以把LListView看成一个很大的画布,clipping的x和y就是显示的起始位置,大小决定了显示的范围大小。而clipping一般不直接修改,改变显示范围大小可以直接调用LListView的resize(width,height)函数来设置大小。

三,每个子项的大小
cellWidth和cellHeight决定了LListView的每个单位子项的大小

四,子单位平铺方向
LListView的arrangement属性决定了子列表是横向平铺还是竖向平铺,它的值分别是LListView.Direction.Horizontal和LListView.Direction.Vertical
demo测试
http://lufylegend.com/api/api/ui/LListView_arrangement.html

五,每行(列)的单位个数
对应上面的子单位平铺方向,maxPerLine代表每行(列)的单位个数
demo测试
http://lufylegend.com/api/api/ui/LListView_maxPerLine.html

六,拖动的方向
列表有横向的也有竖向,当然也有横竖向都有的,你可以通过设置movement属性,来设置在哪个方向上可以拖动。
值分别为LListView.Direction.Vertical竖直方向,LListView.Direction.Horizontal水平方向,LListView.Direction.Unrestricted无限制
demo测试
http://lufylegend.com/api/api/ui/LListView_movement.html

七,拖动时的效果
尤其是在手机上,列表的拖动可以有多种效果,比如快速滑动之后,列表会继续滚动一下,比如在最上方拖拽一下之后,列表会回弹一下等效果,这些效果都可以通过dragEffect属性来设置。值为LListView.DragEffects类型,如下
LListView.DragEffects = {
        None:"none",/*无效果*/
        Momentum:"momentum",/*拖动惯性*/
        MomentumAndSpring:"momentumAndSpring"/*拖动惯性+边界回弹*/
};
demo测试
http://lufylegend.com/api/api/ui/LListView_dragEffect.html

八,滚动条
LListView的滚动条为LListScrollBar对象,通过setHorizontalScrollBar和setVerticalScrollBar来自定义滚动条的样式以及调整滚动条的属性,滚动条的种类有三种,分别如下
LListView.ScrollBarCondition = {
        Always:"always",/*始终显示*/
        OnlyIfNeeded:"onlyIfNeeded",/*在需要显示的时候显示*/
        WhenDragging:"whenDragging"/*只在拖动时显示*/
};
demo测试
http://lufylegend.com/api/api/ui/LListScrollBar.html

九,添加自己的子项
LListView的子项,需要是LListChildView类型,也就是说,你在添加自己的子项的时候,需要先从LListChildView继承下来
demo测试
http://lufylegend.com/api/api/ui/LListView.html

十,子项的点击
因为每个子项都是通过copyPixels来绘制的,并没有实际添加到画布中,所以你无法通过LMouseEvent事件做任何举动,所以,LListChildView提供了自己的onClick函数,如果你需要在点击子项的时候做些什么,那只需要重写onClick函数即可
demo测试
http://lufylegend.com/api/api/ui/LListView_onClick.html
而且onClick的event参数和LMouseEvent事件一样,可以获取到各种参数{currentTarget:LListView对象,target:LListChildView自身,offsetX:同LMouseEvent,offsetY:同LMouseEvent,selfX:同LMouseEvent,selfY:同LMouseEvent}

啰嗦的差不多了,可能还有介绍不全的地方,大家使用的时候如果有疑问,可以再来提问

不回答与技术和引擎不相关的问题
回复

使用道具 举报

0

主题

0

好友

22

积分

士兵

Rank: 1

发表于 2016-7-8 16:03:07 |显示全部楼层
终于有带反弹功能的滑动了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-3-28 18:47 , Processed in 0.047871 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部