# SlideAndDragListView
[](https://bintray.com/yydcdut/maven/SlideAndDragListView/_latestVersion) [](LICENSE.txt) [](https://travis-ci.org/yydcdut/SlideAndDragListView) [](https://android-arsenal.com/api?level=11)
一个可以左右滑动 item 和拖放 item 的 ListView

Demo: [下载](https://github.com/yydcdut/SlideAndDragListView/blob/master/apk/sdlv.apk?raw=true)
更新日志: [CHANGELOG.md](https://github.com/yydcdut/SlideAndDragListView/blob/master/CHANGELOG.md)
# 简介
SlideAndDragListView (SDLV) 继承与 ListView,SDLV 可以向左或者向右滑动 item,并且可以拖放 item 达到排序的目的
一些特点:
1. 清晰的拖放操作
2. 在拖放的时候的直观和平滑滚动
3. 支持item的单击和长单击事件
4. 丰富的回调接口
5. 滑动 item 的方向可以是向左、向右或者两者
6. 等等......
SlideAndDragListView 用于各种优先级列表:收藏夹,播放列表,清单等。我希望你觉得它有用,同时,如果遇到什么问题,或者有什么建议,可以邮件我或者 issue!
# 引用
## Gradle
``` groovy
compile 'com.yydcdut:sdlv:0.7.6'
```
## Jar
[下载](https://github.com/yydcdut/SlideAndDragListView/blob/master/jar/sdlv.jar?raw=true)
# 控件的使用
## 菜单的单击事件和 item 的滑动方向
### 步骤1
- 在 layout 的 xml 文件中添加 SlideAndDragListView
``` xml
```
### 步骤2
- 创建 `Menu` 并添加 `MenuItem`
``` java
Menu menu = new Menu(true, 0);//第1个参数表示滑动 item 是否能滑的过头,像弹簧那样( true 表示过头,就像 Gif 中显示的那样;false 表示不过头,就像 Android 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 size
.setIcon(getResources().getDrawable(R.drawable.ic_launcher))// set icon
.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`:
第二个参数表示 ItemViewType 类型,也就是 `BaseAdapter` 中的 `int getItemViewType( int )`
### 步骤3
- 实现 menu item 的单击事件
``` java
slideAndDragListView.setOnMenuItemClickListener(new 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;
}
return Menu.ITEM_NOTHING;
}
});
```
`Menu.ITEM_NOTHING`:
`Menu.ITEM_SCROLL_BACK`:
`Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP`:
## 创建不同类型的 Menu
- 设置 adapter 中的 `ViewType`
``` java
private BaseAdapter mAdapter = new BaseAdapter() {
// .......
@Override
public int getItemViewType(int position) {
return position % 2;//current menu type
}
@Override
public int getViewTypeCount() {
return 2;//menu type count
}
// ......
}
```
- 通过 adapter 中设置的来创建不同的 Menu
``` java
List