DragSortListView:可以实现拖动排序的listview控件

DragSortListView是一个可以实现拖动排序的listview控件,是我看到的交互较为复杂的开源代码中不管是代码质量还是流畅性都最好的。

 13952401377776

DragSortListView 简称DSLV,继承自listView,能实现拖动排序、滑动删除,主要用于这样的listview,音乐列表、收藏列表、清单列表等。他的主要特点如下:

1.干净利落的拖动效果,不会对界面的已有元素造成视觉上的干扰。

2.即使是在拖动的过程中,如果到了listview的上限边界,仍然能很流畅的滚动listview。

3.允许listview的每个子view高度不一致。

4.提供了startDrag()和stopDrag()公共方法,也就是你可以在任意地方控制拖动。

5.提供了能自定义floating View的接口。

 

DragSortListView 中有三个重要的概念:

1.数据排序。拖动排序能够重写排列list中的数据顺序,因为DragSortListView 并不知道你的数据具体是如何组织的,排序的是由你自己实现DragSortListView 提供的一些监听(Listener)接口来完成的。

2.拖动的开始于结束。startDrag()和stopDrag()分别实现开始与结束,但是一般拖动的效果都是借助于DragSortController来完成的。

3.浮动视图(floating view)。floating view的外观和行为是由实现了FloatViewManager 接口的类控制的。可以通过它将任何view展示出漂浮的效果。

DragSortListView可以直接定义在xml中,当然需要一些必要的属性。

 

Listener

DragSortListView说白了还是一个listview,因此需要listadapter来形成其所有的子项。DSLV额外的在listadapter中对子view做了排序工作,这主要是通过一些listener的回调来实现的。为DragSortListView注册listener有如下两种方式:

1.通过set*Listener的方式。

2.在自定义的ListAdapter中实现Listener的接口,当DragSortListView调用DragSortListView.setAdapter()的时候,DSLV
检测到那些接口被实现然后调用合适的set*Listener()

DragSortListView.DropListener

DragSortListView.DropListener只有一个回调函数

当floating View被释放的时候,被调用,from表示这次拖动是从listview的哪个子view开始的,to表示拖动到哪里,下面是一个使用DropListener的例子:

 

DragSortListView.RemoveListener

DragSortListView的主要功能是提供拖动排序,但是与此同时,它也实现了滑动删除的功能,当删除一个item的时候removerListener将会调用它的remove方法:

参数which表示被删除的是listview的哪个item。

DragSortListView.DragListener

DragListener的回调函数为:

当拖动一个item到任何一个候选的目的位置(item)上方时DragListener都会调用其drag()方法。这个listener主要是监听拖动过程中经过了那些item,可以理解为监听拖动路径。

DragSortListView.DragSortListener

这个listener的作用是综合上述所有listener。

 

FloatViewManager

顾名思义FloatViewManager接口用于管理floatView,他处理floating View的创建,更新以及销毁。通过DSLV的setFloatViewManager()传递给DSLV。

FloatViewManager的例子程序可以在参考SimpleFloatViewManager类。

github 网址https://github.com/bauerca/drag-sort-listview

1 1 收藏

资源整理者简介:sunbiaobiao

(新浪微博:@sunbiao将军) 个人主页 · 贡献了178个资源 · 10


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1439 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer