SlideAndDragListView侧滑删除

来源:互联网 发布:流程优化工具 编辑:程序博客网 时间:2024/05/16 10:06

SlideAndDragListView

Download License Build Status API  

一个可以左右滑动item和拖放item的ListView。

Demo: 下载 或者 二维码

更新日志: CHANGELOG.md

简介

SlideAndDragListView (SDLV) 继承与ListView,SDLV可以向左或者向右滑动Item,并且可以拖放item达到排序的目的。

一些特点:

  1. 清晰的拖放操作。
  2. 在拖放的时候的直观和平滑滚动。
  3. 支持item的单击和长单击事件。
  4. 丰富的回调接口。
  5. 滑动item的方向可以是向左、向右或者两者。
  6. 等等......

SlideAndDragListView 用于各种优先级列表:收藏夹,播放列表,清单等。我希望你觉得它有用,同时,如果遇到什么问题,或者有什么建议,可以邮件我或者 issue!

引用

Gradle

compile 'com.yydcdut.sdlv:sdlv:0.5.5@aar'

或者

compile 'com.yydcdut.sdlv:sdlv:0.5.5'

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(true, true, 0);//第1个参数表示在拖拽的时候 item 的背景是否透明,第2个参数表示滑动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                .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 sdlvlistView.setMenu(menu);

类 Menu 的构造函数中的第一个参数表示在拖拽的时候 item 的背景是否透明;第二个参数表示滑动item是否能滑的过头,就像弹簧效果那样, true 表示过头,就像 Gif 中显示的那样;false表示不过头。

�如果是true:

如果是 false:

第三个参数表示 ItemViewType 类型,也就是BaseAdapter中的int getItemViewType( int )

步骤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:

创建不同类型的Menu

  • 设置 adapter 中的 ViewType
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
List<Menu> menuList = new ArrayList<>(2);Menu menu0 = new Menu(new ColorDrawable(Color.WHITE), true, 0);menu0.addItem(new MenuItem.Builder().setWidth(90)//set Width                .setBackground(new ColorDrawable(Color.RED))// set background                .setText("One")//set text string                .setTextColor(Color.GRAY)//set text color                .setTextSize(20)//set text size                .build());menu0.addItem(new MenuItem.Builder().setWidth(120)                .setBackground(new ColorDrawable(Color.BLACK))                .setDirection(MenuItem.DIRECTION_RIGHT)//set direction (default DIRECTION_LEFT)                .setIcon(getResources().getDrawable(R.drawable.ic_launcher))// set icon                .build());Menu menu1 = new Menu(new ColorDrawable(Color.YELLOW), false, 1);menu1.addItem(new MenuItem.Builder().setWidth(60)                .setBackground(new ColorDrawable(Color.RED))                .setText("Two")                .setTextColor(Color.GRAY)                .setTextSize(25)                .build());menu1.addItem(new MenuItem.Builder().setWidth(70)                .setBackground(new ColorDrawable(Color.BLUE))                .setText("Three")                .setDirection(MenuItem.DIRECTION_RIGHT)                .setTextColor(Color.BLACK)                .setTextSize(20)                .build());menuList.add(menu0);menuList.add(menu1);listView.setMenu(menuList)
  • Demo 效果

拖放

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之后。

Scroll 监听器

slideAndDragListView.setOnListScrollListener(new SlideAndDragListView.OnListScrollListener(){        @Override        public void onScrollStateChanged(AbsListView view,int scrollState){            if(scrollState==SlideAndDragListView.OnListScrollListener.SCROLL_STATE_FLING){            }else if(scrollState==SlideAndDragListView.OnListScrollListener.SCROLL_STATE_FLING){            }else if(scrollState==SlideAndDragListView.OnListScrollListener.SCROLL_STATE_TOUCH_SCROLL){            }        }        @Override        public void onScroll(AbsListView view,int firstVisibleItem,int visibleItemCount,int totalItemCount){        }    });

与 ListView.OnScrollListener 相同。

API

关闭 Menu

slideAndDragListView.closeSlidedItem();

调用 API 手动关闭 Menu。

删除 Menu

slideAndDragListView.deleteSlideItem();

调用 API 手动删除 Menu。

License

Copyright 2015 yydcdut

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

0 0
原创粉丝点击