RecyclerView側滑菜單,滑動刪除,長按拖拽,下拉刷新上拉加載

轉自:http://blog.csdn.net/yanzhenjie1003/article/details/52115566

RecyclerView側滑菜單,RecyclerView滑動刪除,RecyclerView長按拖拽,效果看下圖,大家也可以下載演示apk具體操作體驗下SwipeRecyclerView的強大。

本文介紹的庫中的側滑效果借鑑自SwipeMenu,並對SipwMenu的源碼做了修改與Bug修復,然後才開發出的SwipeRecyclerView。

  1. 需要說明的是,本庫沒有對RecyclerView做大的修改,只是ItemView的封裝。看起來是對RecyclerView的修改,其實僅僅是爲RecyclerView添加了使用的方法API而已。
  2. 本庫已經更新了三個版本了,會一直維護下去,根據小夥伴的要求,以後也會添加一些其它功能。

SwipeRecyclerView將完美解決這些問題:

  1. 以下功能全部支持:豎向ListView、橫向ListView、Grid、StaggeredGrid四種形式。
  2. RecyclerView 左右兩側 側滑菜單。
  3. 菜單橫向排布、菜單豎向排布。
  4. RecyclerView長按拖拽Item。
  5. RecyclerView側滑刪除item。
  6. 指定RecyclerView的某一個Item不能滑動刪除或長按拖拽。
  7. 某一個Item顯示的不同的菜單(類似QQ)。
  8. 用SwipeMenuLayout在任何地方都可以實現你自己的側滑菜單。
  9. 使用SwipeRecyclerView下拉刷新、自動加載更多。
  10. 可以和ViewPager嵌套使用(兼容滑動衝突)。

SwipeRecyclerView的源碼託管在Github:https://github.com/yanzhenjie/SwipeRecyclerView,歡迎Star。

引用方法

  • Eclipse 請自行下載源碼
  • AndroidStudio使用Gradle構建添加依賴(推薦)
compile 'com.yanzhenjie:recyclerview-swipe:1.0.2'
  • 1
  • 1

Or Maven:

<dependency>
  <groupId>com.yanzhenjie</groupId>
  <artifactId>recyclerview-swipe</artifactId>
  <version>1.0.2</version>
  <type>pom</type>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

我在開發SwipeRecyclerView時引用的RecyclerView版本如下:

compile 'com.android.support:recyclerview-v7:23.4.0'
  • 1
  • 1

效果圖

gif有一些失真,且網頁加載速度慢,可以[下載demo的apk][3]看效果。

側滑菜單

  1. 左右兩側都有菜單,主動調出第幾個菜單或者手指滑動出現。
  2. 根據ViewType某一個Item顯示的不同的菜單(類似QQ)

<兩側側滑菜單 不同的Item不同的菜單

和ViewPager嵌套 下拉刷新、自動加載更多

  1. 和ViewPager嵌套使用,兼容了滑動衝突。
  2. 可以和任何下拉刷新的框架結合,滑動到底部自動加載更多。

和ViewPager嵌套使用 下拉刷新加載更多

長按拖拽 側滑菜單結合使用

  1. 一直按住Item進行拖拽排序,支持List、Grid形式。
  2. 長按拖拽並且和側滑菜單結合使用。

List拖拽排序、菜單 Grid拖拽排序、菜單

直接滑動刪除 長按拖拽Item排序

  1. 側滑直接刪除,也可以長按拖拽排序。
  2. 可以指定某個Item不能被側滑刪除、不能被長按拖拽。

側滑刪除 指定某一個不能拖拽、滑動刪除

豎型菜單 用自定義佈局實現自己的菜單

  1. 給菜單設置排列方向,支持橫向、豎向。
  2. 開發者用庫中的SwipeMenuLayout開發自己的側滑菜單。

菜單排列方向 自定義菜單

使用介紹

這裏列出關鍵實現,具體請參考demo,或者加最上面的交流羣一起討論。 更多教程請進入我的博客查看。

啓用SwipeReyclerView的長按Item拖拽功能和側滑刪除功能

recyclerView.setLongPressDragEnabled(true);// 開啓長按拖拽
recyclerView.setItemViewSwipeEnabled(true);// 開啓滑動刪除。
recyclerView.setOnItemMoveListener(onItemMoveListener);// 監聽拖拽和側滑刪除,更新UI和數據。
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

添加Item側滑菜單

側滑菜單支持自動打開某個Item的菜單,並可以指定是左邊還是右邊的:

// 打開第一個Item的左側菜單。
recyclerView.openLeftMenu(0);

// 打開第一個Item的右側菜單。
recyclerView.openRightMenu(0);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 第一步,引用自定義View:SwipeMenuReyclerView:
<com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 第二步,設置菜單創建器、菜單點擊監聽:
SwipeMenuRecyclerView swipeMenuRecyclerView = findViewById(R.id.recycler_view);
// 設置菜單創建器。
swipeMenuRecyclerView.setSwipeMenuCreator(swipeMenuCreator);
// 設置菜單Item點擊監聽。
swipeMenuRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 第三步,菜單創建器創建菜單:
/**
 * 菜單創建器。在Item要創建菜單的時候調用。
 */
private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() {
    @Override
    public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {

        SwipeMenuItem addItem = new SwipeMenuItem(mContext)
            .setBackgroundDrawable(R.drawable.selector_green)// 點擊的背景。
            .setImage(R.mipmap.ic_action_add) // 圖標。
            .setWidth(size) // 寬度。
            .setHeight(size); // 高度。
        swipeLeftMenu.addMenuItem(addItem); // 添加一個按鈕到左側菜單。

        SwipeMenuItem deleteItem = new SwipeMenuItem(mContext)
            .setBackgroundDrawable(R.drawable.selector_red)
            .setImage(R.mipmap.ic_action_delete) // 圖標。
            .setText("刪除") // 文字。
            .setTextColor(Color.WHITE) // 文字顏色。
            .setTextSize(16) // 文字大小。
            .setWidth(size)
            .setHeight(size);
        swipeRightMenu.addMenuItem(deleteItem);// 添加一個按鈕到右側側菜單。.

        // 上面的菜單哪邊不要菜單就不要添加。
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

更多使用方法請參考Demo,或者加最上方的QQ羣來交流。

  • 第四步,繼承SwipeMenuAdapter,和正常的Adapter一樣使用:
public class MenuAdapter extends SwipeMenuAdapter<MenuAdapter.DefaultViewHolder> {

    @Override
    public int getItemCount() {
        return 0;
    }

    @Override
    public View onCreateContentView(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public ViewHolder onCompatCreateViewHolder(View realContentView, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(MenuAdapter.DefaultViewHolder holder, int position) {
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

就到這裏,更多的細節,請參考Github上的demo和源碼,源碼demo下載傳送門


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章