SlideAndDragListView_一个可以左右滑动item和拖放item的ListView。
2015-12-14 15:54
477 查看
SlideAndDragListView
一个可以左右滑动item和拖放item的ListView。Demo: 下载
简介
SlideAndDragListView (SDLV) 继承与ListView,SDLV可以向左或者向右滑动Item,并且可以拖放item达到排序的目的。一些特点:
清晰的拖放操作。
在拖放的时候的直观和平滑滚动。
支持item的单击和长单击事件。
丰富的回调接口。
滑动item的方向可以是向左、向右或者两者。
等等......
SlideAndDragListView 用于各种优先级列表:收藏夹,播放列表,清单等。我希望你觉得它有请,同时,如果发现bug或者不人性化的地方,或者有什么建议,请麻烦告诉我或者帮助我!
引用
Gradle
compile 'com.yydcdut.sdlv:sdlv:0.3.2@aar'
aar
下载
Jar
下载
控件的使用
菜单的单击事件和item的滑动方向
步骤1
在layout的xml文件中添加SlideAndDragListView<com.yydcdut.sdlv.SlideAndDragListView android:layout_width="fill_parent" android:layout_height="fill_parent"> </com.yydcdut.sdlv.SlideAndDragListView>
步骤2
创建Menu并添加
MenuItem
Menu menu = new Menu((int) getResources().getDimension(R.dimen.slv_item_height), new ColorDrawable(Color.WHITE), true);//第三个参数表示滑动item是否能滑的过量(true表示过量,就像Gif中显示的那样;false表示不过量,就像QQ中的那样) menu.addItem(new MenuItem.Builder().setWidth(90)//单个菜单button的宽度 .setBackground(new ColorDrawable(Color.RED))//设置菜单的背景 .setText("One")//set text string .setTextColor(Color.GRAY)//set text color .setTextSize(20)//set text color .build()); menu.addItem(new MenuItem.Builder().setWidth(120) .setBackground(new ColorDrawable(Color.BLACK)) .setDirection(MenuItem.DIRECTION_RIGHT)//设置方向 (默认方向为DIRECTION_LEFT) .setIcon(getResources().getDrawable(R.drawable.ic_launcher))// set icon .build()); //set in sdlv listView.setMenu(menu);
类
Menu的构造函数中的第三个参数表示滑动item是否能滑的过量(true表示过量,就像Gif中显示的那样;false表示不过量。
�如果是
true:
如果是
false:
步骤3
实现 menu item的单击事件slideAndDragListView.setOnSlideListener(new SlideAndDragListView.OnSlideListener() { @Override public void onSlideOpen(View view, View parentView, int position, int direction) { } @Override public void onSlideClose(View view, View parentView, int position, int direction) { } }); slideAndDragListView.setOnMenuItemClickListener(new SlideAndDragListView.OnMenuItemClickListener() { @Override public int onMenuItemClick(View v, int itemPosition, int buttonPosition, int direction) { switch (direction) { case MenuItem.DIRECTION_LEFT: switch (buttonPosition) { case 0://One return Menu.ITEM_SCROLL_BACK; } break; case MenuItem.DIRECTION_RIGHT: switch (buttonPosition) { case 0://icon return Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP; } break; default : return Menu.ITEM_NOTHING; } } });
注意:必须得设置OnSlideListener监听器。
Menu.ITEM_NOTHING`:
Menu.ITEM_SCROLL_BACK:
Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP:
拖放
slideAndDragListView.setOnDragListener(new SlideAndDragListView.OnDragListener() { @Override public void onDragViewStart(int position) { } @Override public void onDragViewMoving(int position) { } @Override public void onDragViewDown(int position) { } }, mDataList);
public void onDragViewStart(int position).参数
position表示的是刚开始拖动的时候取的item在ListView中的位置。
public void onDragViewMoving(int position).参数
position表示的是当前拖动的item在ListView的位置,当处于拖动的时候这个函数是会一直回调的。
public void onDragViewDown(int position). 参数
positioni傲世的是拖动的item最放到了ListView的哪个位置。
其他
Item单击
slideAndDragListView.setOnListItemClickListener(new SlideAndDragListView.OnListItemClickListener() { @Override public void onListItemClick(View v, int position) { } });
Item长单击
slideAndDragListView.setOnListItemLongClickListener(new SlideAndDragListView.OnListItemLongClickListener() { @Override public void onListItemLongClick(View view, int position) { } });
Item滑动监听器
SlideAndDragListView.OnSlideListener() { @Override public void onSlideOpen(View view, View parentView, int position, int direction) { } @Override public void onSlideClose(View view, View parentView, int position, int direction) { } });
Item删除监听器
slideAndDragListView.setOnItemDeleteListener(new SlideAndDragListView.OnItemDeleteListener() { @Override public void onItemDelete(View view, int position) { } });
public void onItemDelete(View view, int position)的调用是在
int onMenuItemClick(View v, int itemPosition, int buttonPosition, int direction)返回
Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP之后.
权限
<uses-permission android:name="android.permission.VIBRATE"/>
相关文章推荐
- 网页编辑里href标记 src标记 url标记三者的区别
- coredump简介与coredump原因总结
- [从头学python] 第05节 字符串模块string
- Linux ramfs tmpfs使用
- HDU 2159 二维完全背包(二维费用)
- C语言中整型溢出的危害
- apache服务器设置
- Android SDK 安装缓慢问题解决方案
- 关于接入第三方推送,国产手机无法接收到推送消息的的问题
- 臆想了一个方案---全民医疗
- Objective-C 引用计数:不讲用法,只说原理
- apache服务器设置
- 【189】◀▶ PowerShell 系统学习
- c4.c --- C in four functions 之简介
- 测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇
- 用apache commons-pool2建立thrift连接池
- UI之scrollPageControl
- 基于纠错编码的SVM多类分类算法和基于二叉树的多类SVM算法的基本思想
- <3>Android4.2.2 CameraService服务启动和应用端camera初始化记录
- 深度优先搜索(DFS)与广度优先搜索(BFS)