Dragable and swipeable pullrefresh recyclerview

DragableRecyclerView

dragable and swipeable pullrefresh recyclerview.

useage

Step 1. Add the JitPack repository to your build file
Add it in your root build.gradle at the end of repositories:

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

Step 2. Add the dependency

dependencies {
        compile 'com.github.yilylong:DragableRecyclerView:v1.0.2'
}

in your xml:

<com.zhl.dragablerecyclerview.view.DragableRecyclerView
    android:id="@+id/recyclerview"
    android:background="#5e5c5c"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

swipe menu

// 是否开启侧滑
    mRecyclerView.setSwipeEnable(true);
// 设置侧滑菜单
    mRecyclerView.setMenuCreator(new SwipeMenuCreator() {
        @Override
        public void create(SwipeMenu menu) {
            SwipeMenuItem deleteItem = new SwipeMenuItem(getApplicationContext());
            deleteItem.setBackground(R.color.colorAccent);
            deleteItem.setWidth(dp2px(MainActivity.this, 90));
            deleteItem.setTitle("删除");
            deleteItem.setIcon(R.mipmap.icon_delete);
            deleteItem.setTitleSize(18);
            deleteItem.setTitleColor(Color.WHITE);
            menu.addMenuItem(deleteItem);

            SwipeMenuItem collectionItem = new SwipeMenuItem(getApplicationContext());
            collectionItem.setBackground(R.color.green);
            collectionItem.setWidth(dp2px(MainActivity.this, 90));
            collectionItem.setTitle("收藏");
            collectionItem.setTitleSize(18);
            collectionItem.setTitleColor(Color.WHITE);
            collectionItem.setIcon(R.mipmap.icon_collection);
            menu.addMenuItem(collectionItem);
        }
    });
    
// 设置侧滑菜单的监听
    mRecyclerView.setOnSwipedMenuItemClickListener(new DragableRecyclerView.OnSwipedMenuItemClickListener() {

        @Override
        public void onMenuItemClick(int position, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter, SwipeMenu menu, int index) {
            if(index==0){
                adapter.notifyItemRemoved(position);
                Toast.makeText(MainActivity.this,"删除第"+position+"项",Toast.LENGTH_SHORT).show();
            }else if(index==1){
                Toast.makeText(MainActivity.this,"收藏第"+position+"项",Toast.LENGTH_SHORT).show();
            }
        }
    });       

长按拖拽排序

// 是否可以长按拖拽
    mRecyclerView.setLongPressDragEnabled(true);  
    // 设置长按拖拽的监听
    mRecyclerView.setOnItemDragListener(new DragableRecyclerView.OnItemDragListener() {
        @Override
        public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
            if(viewHolder!=null){
                viewHolder.itemView.setBackgroundResource(R.color.colorAccent);
            }
        }
        @Override
        public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) {
            String movedTX = Data.remove(fromPos);
            Data.add(toPos,movedTX);
        }

        @Override
        public boolean onDragScaleable() {
            return true;
        }
        @Override
        public void onDragCompleted(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            viewHolder.itemView.setBackgroundResource(R.color.gray);
        }
    });

下拉刷新

// 是否开启下拉刷新
    mRecyclerView.setPullRefreshEnable(true);
    // 是否开启上拉加载
    mRecyclerView.setPullLoadMoreEnable(true);
// 设置下拉刷新的监听
    mRecyclerView.setPullRefreshListener(new DragableRecyclerView.OnPullRefreshListener() {
        @Override
        public void onRefresh() {
            mRecyclerView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    refresh();
                    mRecyclerView.stopRefresh();
                }
            },3000);
        }
        @Override
        public void onLoadMore() {

            mRecyclerView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    loadMore();
                    mRecyclerView.stopLoadMore();
                }
            },3000);
        }
        @Override
        public void onUpdateRefreshTime(long time) {
            mRecyclerView.setRefreshTime(time);
        }
    });

自定义刷新头

继承CBRefreshHeaderView,根据需要覆盖CBRefreshState中的各种状态方法,recyclerview会回调下拉刷新和上拉加载的各种方法。主要通过更改刷新头高度或者mragin来实现,参考CBRefreshHeader和CBRefreshFooter。

  // 设置自定义的下拉刷新和上拉加载刷新头
 mRecyclerView.setRefreshHeader(new CustomHeader(this));
 mRecyclerView.setLoadMoreFooter(new CustomFooter(this));

GitHub