Android学习系列--App列表之拖拽ListView(下)
2015-09-24 19:48
239 查看
接着上篇Android学习系列(10)--App列表之拖拽ListView(上)我们继续实现ListView的拖拽效果。
7.重写onTouchEvent()方法。
在这个方法中我们主要是处理拖动和放下。
拖动是选中项的影像随着手指滑动;放下是在拖动结束的时候交换数据。
方法的整体结构如下:
8.拖动影像。
拖动的时候,我们调用了onDrag(int y)方法,主要做的事情是,让选中项的影像随这手指滑动起来。如下:
当数据集合很大的时候,还需要在拖动到上部区域或者下部区域的时候滚动列表,使用ListView自带的方法setSelectionFromTop()。
一个可以滚动的拖拽列表雏形就出来了,最终onDrag()方法代码如下:
拖动的效果如下:
9.放下影像,数据更新。
上面实现了拖动的效果,放下影像后:
1)我们要获取放下的位置是数据集合的哪一项;
2)在放下位置项插入拖动数据,并删除拖动数据原位置项
这些处理写在了onDrop()方法中,在ACTION_UP动作中执行,代码如下:
放下时我们就能实现数据的更新了,拖动后的数据状态就能保存下来(虽然保存在dapter中了)。效果如下:
我处理了一下(在dapter的方法中定义getList()方法得到adpter中List<String>,使用toString()方法连接起来),把adapter的结果输出来看看:
至于数据的详细处理或者保存,不是本文拖拽的内容,只要抓住adapter集合分析应该很容易的。
三、拓展
10.分组拖拽拓展。
前面我们一直在数据源中添加了分组标签A组,B组的,下面我们就把数据分成A组,B组,更详细内容可参考 Android学习系列(9)--App列表之分组ListView。
1)定义分组标签样式布局drag_list_item_tag.xml。
2)修改DragListAdapter中getView()方法。
3)禁用分组标签项的响应事件,在DragListAapter中重写方法isEnable()。
刚好因为在分组标签中去掉了拖拽图像,所以点击在分组标签中的话,dragImageView为空,不会有被拖动的效果了,这就是前面说的顺手的一个妙用了。
4)标签项是不能拖动位置的,所以我们要修改一下onDrop()中的上边界控制。
最终效果为:
至此,拖拽ListView的实现结束了。
如果您发现有什么bug,联系我。
难得的上传一下代码,没找到博客园上传文件的地方,我放到了github上,下载地址是: https://github.com/fjtianxia/qianxudetianxia。
7.重写onTouchEvent()方法。
在这个方法中我们主要是处理拖动和放下。
拖动是选中项的影像随着手指滑动;放下是在拖动结束的时候交换数据。
方法的整体结构如下:
拖动的时候,我们调用了onDrag(int y)方法,主要做的事情是,让选中项的影像随这手指滑动起来。如下:
一个可以滚动的拖拽列表雏形就出来了,最终onDrag()方法代码如下:
9.放下影像,数据更新。
上面实现了拖动的效果,放下影像后:
1)我们要获取放下的位置是数据集合的哪一项;
2)在放下位置项插入拖动数据,并删除拖动数据原位置项
这些处理写在了onDrop()方法中,在ACTION_UP动作中执行,代码如下:
我处理了一下(在dapter的方法中定义getList()方法得到adpter中List<String>,使用toString()方法连接起来),把adapter的结果输出来看看:
至于数据的详细处理或者保存,不是本文拖拽的内容,只要抓住adapter集合分析应该很容易的。
三、拓展
10.分组拖拽拓展。
前面我们一直在数据源中添加了分组标签A组,B组的,下面我们就把数据分成A组,B组,更详细内容可参考 Android学习系列(9)--App列表之分组ListView。
1)定义分组标签样式布局drag_list_item_tag.xml。
刚好因为在分组标签中去掉了拖拽图像,所以点击在分组标签中的话,dragImageView为空,不会有被拖动的效果了,这就是前面说的顺手的一个妙用了。
至此,拖拽ListView的实现结束了。
如果您发现有什么bug,联系我。
难得的上传一下代码,没找到博客园上传文件的地方,我放到了github上,下载地址是: https://github.com/fjtianxia/qianxudetianxia。
相关文章推荐
- Android 手势操作GestureDetector
- Android学习系列--App列表之拖拽ListView(上)
- android内存文件读写
- CocoStudio基础教程(5)使用CocoStudio场景编辑器关联组件
- Android.mk写法
- 线程池ThreadPoolExecutor使用简介
- android四大组件详解
- Cocos2d-x中的CC_CALLBACK_0,1,2,3
- iOS_XML与JSON解析
- Android中自定义弹窗提醒控件
- Android学习实践:7.使用布局文件进行事件绑定
- WebViewClient与WebChromeClient的区别
- 编写 Android 触摸屏手势识别程序
- IOS Alcatraz Xcode6.4安装指南
- Unity3D:NGUI 深入剖析NGUI的游戏UI架构
- android 的wifi设置
- Android的事件传递(仿下拉刷新)
- 蓝懿iOS培训日志19 SearchBarController
- AndroidService 深度分析(2)
- swift语言基础之:subscript下标、对象之间的循环强引用的处理方法