SlideAndDragListView_一個可以左右滑動item和拖放item的ListView。

SlideAndDragListView

一個可以左右滑動item和拖放item的ListView。

Demo: 下載

簡介

SlideAndDragListView (SDLV) 繼承與ListView,SDLV可以向左或者向右滑動Item,並且可以拖放item達到排序的目的。

一些特點:

  1. 清晰的拖放操作。
  2. 在拖放的時候的直觀和平滑滾動。
  3. 支持item的單擊和長單擊事件。
  4. 豐富的回調接口。
  5. 滑動item的方向可以是向左、向右或者兩者。
  6. 等等......

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"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章