关闭

SlideAndDragListView学习笔记

标签: SlideAndDragListView
399人阅读 评论(0) 收藏 举报
分类:
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
privateBaseAdapter mAdapter=newBaseAdapter() {
// .......
@Override
publicintgetItemViewType(intposition) {
return position%2;//当情menu的类型
        }

@Override
publicintgetViewTypeCount() {
return2;//所有的menu数量
        }
}

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

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

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


其他的监听事件
1.listview的itemClickListener;
2.listview的itemLongClickListener;
3.slideAndDragListView的slideListener:
slideAndDragListView.OnSlideListener() {
            @Override
publicvoid onSlideOpen(View view, View parentView,int position,int direction) {
            //这里的view是listview的item,parentView是SDLV,position是listview中view的位置,direction是item滑动的方向
            }
            @Override
publicvoid onSlideClose(View view, View parentView,int position,int direction) {
            }
        });
4.slideAndDragListView的滚动监听(和listview的滚动监听相似)
slideAndDragListView.setOnListScrollListener(newSlideAndDragListView.OnListScrollListener(){
@Override
publicvoidonScrollStateChanged(AbsListViewview,intscrollState){
if(scrollState==SlideAndDragListView.OnListScrollListener.SCROLL_STATE_FLING){
            }elseif(scrollState==SlideAndDragListView.OnListScrollListener.SCROLL_STATE_FLING){
            }elseif(scrollState==SlideAndDragListView.OnListScrollListener.SCROLL_STATE_TOUCH_SCROLL){
            }
        }
@Override
publicvoidonScroll(AbsListViewview,intfirstVisibleItem,intvisibleItemCount,inttotalItemCount){
        }
    });


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



   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3533次
    • 积分:75
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章存档