轉自:http://blog.csdn.net/yanzhenjie1003/article/details/52115566
RecyclerView側滑菜單,RecyclerView滑動刪除,RecyclerView長按拖拽,效果看下圖,大家也可以下載演示apk具體操作體驗下SwipeRecyclerView的強大。
本文介紹的庫中的側滑效果借鑑自SwipeMenu,並對SipwMenu
的源碼做了修改與Bug修復,然後才開發出的SwipeRecyclerView。
- 需要說明的是,本庫沒有對RecyclerView做大的修改,只是ItemView的封裝。看起來是對RecyclerView的修改,其實僅僅是爲RecyclerView添加了使用的方法API而已。
- 本庫已經更新了三個版本了,會一直維護下去,根據小夥伴的要求,以後也會添加一些其它功能。
SwipeRecyclerView將完美解決這些問題:
- 以下功能全部支持:豎向ListView、橫向ListView、Grid、StaggeredGrid四種形式。
- RecyclerView 左右兩側 側滑菜單。
- 菜單橫向排布、菜單豎向排布。
- RecyclerView長按拖拽Item。
- RecyclerView側滑刪除item。
- 指定RecyclerView的某一個Item不能滑動刪除或長按拖拽。
- 某一個Item顯示的不同的菜單(類似QQ)。
- 用SwipeMenuLayout在任何地方都可以實現你自己的側滑菜單。
- 使用SwipeRecyclerView下拉刷新、自動加載更多。
- 可以和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]看效果。
側滑菜單
- 左右兩側都有菜單,主動調出第幾個菜單或者手指滑動出現。
- 根據ViewType某一個Item顯示的不同的菜單(類似QQ)
和ViewPager嵌套 下拉刷新、自動加載更多
- 和ViewPager嵌套使用,兼容了滑動衝突。
- 可以和任何下拉刷新的框架結合,滑動到底部自動加載更多。
長按拖拽 側滑菜單結合使用
- 一直按住Item進行拖拽排序,支持List、Grid形式。
- 長按拖拽並且和側滑菜單結合使用。
直接滑動刪除 長按拖拽Item排序
- 側滑直接刪除,也可以長按拖拽排序。
- 可以指定某個Item不能被側滑刪除、不能被長按拖拽。
豎型菜單 用自定義佈局實現自己的菜單
- 給菜單設置排列方向,支持橫向、豎向。
- 開發者用庫中的
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下載傳送門。