自定义自定义ListView实现拖拽实现拖拽ListItem项交换位置项交换位置(附源码附源码)
本文要实现的是拖拽ListView的Item项,在布局方面还是用基于布局泵LayoutInflater来从不同的Layout模板拿到
不同的布局然后将view返回,感兴趣的朋友可以了解下哈
写在前面的话写在前面的话
在上一篇实现了通过布局泵拿到不同布局为listitem布局,然后实现联系人的ListView,这一章要做的是拖拽ListView的Item
项,本章原理是在上一篇博客基础之上的,上一篇博客:自定义Adapter并通过布局泵LayoutInflater抓取layout模板编辑每一
个item
实现效果图
说明说明
首先我们看到的上面这张图就是实现的效果图了。拖动之后数据项完成交换位置。
功能剖析功能剖析
我们看到做的这个效果是一个拖拽ListView的Item项位置的功能,在布局方面还是用基于布局泵LayoutInflater来从不同的
Layout模板拿到不同的布局然后将view返回。关于布局这一点的知识在上一篇有详细说明,文章开头已经说明,OK,下面我
们来剖析一下这个拖动效果的实现吧,下面的文章将会以方法执行的顺序来给出各个方法的代码。然后依次剖析每个方法的作
用。
方法执行顺序方法执行顺序
[DragView] -> [初始化ListViewContext,和触发move事件的最小距离变量]
[onInterceptTouchEvent] -> [初始化拖动的变量]
[startDrag] -> [准备拖动的影像、window等变量]
[stopDrag] -> [判断重置拖动的影像]
[startDrag] -> [准备拖动的影像、window等变量]
[onTouchEvent] -> [判断点击事件、根据动作做不同操作,或重新绘制Move影响,或者Stop停止拖动。交换数据,也就是下
面的这两个方法]
[onDrag] -> [实现滚动的动作]
[onDrop] -> [实现数据item位置切换]
注意
上面的方法执行顺序只是大概逻辑,这其中还有判断和方法中调用其他方法,所以方法的调用是多次的,大家凑合看一下方法
的大体功能吧,需要注意的是我们重写的onTouchEvent是要一直不断的监听我们的按键的,如果为Move的话也就是会一直不