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)
. 參數 position
i傲世的是拖動的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"/>