SlideAndDragListView学习笔记

1.概述
SlideAndDragListView支持ListView的Item的拖动排序、左右滑动事件,可自定义左右滑动显示文字、图标、位移,同时支持onItemClick、onItemLongClick等监听器;

项目地址:https://github.com/yydcdut/SlideAndDragListView

grandle:
compile 'com.yydcdut.sdlv:sdlv:0.5.1@aar'

Step1:
 SlideAndDragListView添加到布局中
<com.yydcdut.sdlv.SlideAndDragListView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
</com.yydcdut.sdlv.SlideAndDragListView>

Step2:
创建布局并且添加布局
Menu menu = new Menu(true, true, 0);//第二个参数可以忽略
menu.addItem(new MenuItem.Builder().setWidth(90)//设置高度
                .setBackground(new ColorDrawable(Color.RED))// 设置背景
                .setText("One")//设置内容
                .setTextColor(Color.GRAY)//设置字体颜色
                .setTextSize(20)//设置字体大小
                .build());
menu.addItem(new MenuItem.Builder().setWidth(120)
                .setBackground(new ColorDrawable(Color.BLACK))
                .setDirection(MenuItem.DIRECTION_RIGHT)//设置方向(默认是往左)
                .setIcon(getResources().getDrawable(R.drawable.ic_launcher))// 设置图标
                .build());
//set in sdlv
slideAndDragListView.setMenu(menu);
菜单的构造函数:Menu(bool wannaTransparentWhileDragging, boolean wannaOver, int menuViewType);
第一个参数是设置背景是否拖动时透明,第二个参数可以忽略,第三个参数int是视图的类型,来源getItemViewType(int);
如果设置为true,效果图如下:
如果设置为false,效果图如下:
 
 
step3:实现菜单项的点击事件(必须设置OnSlideListener
 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;
                }
            }
        });
Menu.ITEM_NOTHING效果如下:

Menu.ITEM_SCROLL_BACK效果如下:

Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP效果如下:


创建不同的Menu

1.在adapter中使用ViewType
private BaseAdapter mAdapter = new BaseAdapter () {
// .......
@Override
public int getItemViewType ( int position ) {
return position % 2 ; //当情menu的类型
        }

@Override
public int getViewTypeCount () {
return 2 ; //所有的menu数量
        }
}

2.根据视图类型创建不同的菜单
List<Menu> menuList = new ArrayList<> ( 2 );//创建一个menu的list
Menu menu0 = new Menu ( new ColorDrawable ( Color .WHITE ), true , 0 );//设置第一个menu
menu0 . addItem( new MenuItem . Builder () . setWidth( 90 ) //设置高度
                .setBackground( new ColorDrawable ( Color .RED )) // 设置背景
                .setText( "One" ) //设置内容
                .setTextColor( Color .GRAY ) //设置字体颜色
                .setTextSize( 20 ) //设置字体大小
                .build());
menu0 . addItem( new MenuItem . Builder () . setWidth( 120 )
                .setBackground( new ColorDrawable ( Color .BLACK ))
                .setDirection( MenuItem .DIRECTION_RIGHT ) //设置可滑动方向,默认是向左
                .setIcon(getResources() . getDrawable( R . drawable . ic_launcher)) // 设置图标
                .build());
Menu menu1 = new Menu ( new ColorDrawable ( Color .YELLOW ), false , 1 );//设置第二个menu
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)


Drag
1.设置拖动监听
slideAndDragListView . setOnDragListener( new SlideAndDragListView . OnDragListener () {
@Override
public void onDragViewStart ( int position ) {
            //position是item开始的位置
            }

@Override
public void onDragViewMoving ( int position ) {
            //position是它在listview中它移动的位置,当拖动item移动时这个方法将会被调用,同时,它的位置也在改变
            }

@Override
public void onDragViewDown ( int position ) {
            //position是拖动结束后item在listview中的位置
            }
        }, mDataList);


其他的监听事件
1.listview的itemClickListener;
2.listview的itemLongClickListener;
3.slideAndDragListView的slideListener:
slideAndDragListView.OnSlideListener () {
            @ Override
public void onSlideOpen( View view, View parentView, int position, int direction) {
            //这里的view是listview的item,parentView是SDLV,position是listview中view的位置,direction是item滑动的方向
            }
            @ Override
public void onSlideClose( View view, View parentView, int position, int direction) {
            }
        });
4. slideAndDragListView的滚动监听(和listview的滚动监听相似)
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 ){
        }
    });


关闭Menu
slideAndDragListView . closeSlidedItem();
//手动关闭menu
 
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值