Android LRecyclerView 實現側滑選單、長按拖拽等功能
LRecyclerView能做什麼?
經過再三思考,同時也為了大家使用方便,LRecyclerView集成了SwipeMenu系列功能,包括Item側滑選單、長按拖拽Item,滑動刪除Item等功能。
demo apk下載地址:點我下載
功能演示
本次新增SwipeMenu系列功能描述如下:
- 左右兩側都有選單;
- 根據ViewType顯示選單;
- 長按拖拽Item(List),與選單結合;
- 長按拖拽Item(Grid);
- 滑動刪除Item;
- 指定某個Item不能拖拽或者不能滑動刪除;
- 用SwipeMenuLayout實現你自己的側滑。
SwipeMenuAdapter
為了實現SwipeMenu的功能,此次新增了一個
SwipeMenuAdapter與library中已經存在的LRecyclerViewAdapter會不會衝突呢?答案是不會。SwipeMenuAdapter是使用者級別的基類adapter,也就是使用者需要繼承SwipeMenuAdapter去實現自己的adapter,還像之前那樣使用即可。
SwipeMenuAdapter類的定義:
Java1 | publicabstractclassSwipeMenuAdapter<VH extendsRecyclerView.ViewHolder>extendsRecyclerView.Adapter<VH> |
實現自己的MenuAdapter:
Java12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | publicclassMenuAdapterextendsSwipeMenuAdapter{protectedList mDataList=newArrayList<>();publicMenuAdapter(){}@OverridepublicintgetItemCount(){returnmDataList.size();}publicList getDataList(){returnmDataList;}publicvoidsetDataList(Collection list){this.mDataList.clear();this.mDataList.addAll(list);notifyDataSetChanged();}publicvoidaddAll(Collection list){intlastIndex=this.mDataList.size();if(this.mDataList.addAll(list)){notifyItemRangeInserted(lastIndex,list.size());}}publicvoidremove(intposition){mDataList.remove(position);notifyItemRemoved(position);if(position!=mDataList.size()){// 如果移除的是最後一個,忽略notifyItemRangeChanged(position,mDataList.size()-position);}}publicvoidclear(){mDataList.clear();notifyDataSetChanged();}@OverridepublicView onCreateContentView(ViewGroup parent,intviewType){returnLayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_text_swipe,parent,false);}@OverridepublicMenuAdapter.DefaultViewHolder onCompatCreateViewHolder(View realContentView,intviewType){returnnewDefaultViewHolder(realContentView);}@OverridepublicvoidonBindViewHolder(MenuAdapter.DefaultViewHolder holder,intposition){Stringitem=mDataList.get(position).title;DefaultViewHolder viewHolder=holder;viewHolder.tvTitle.setText(item);}staticclassDefaultViewHolder extendsRecyclerView.ViewHolder{TextView tvTitle;publicDefaultViewHolder(View itemView){super(itemView);tvTitle=(TextView)itemView.findViewById(R.id.tv_title);}}} |
是不是很方便?MenuAdapter基本的功能都滿足了,直接拷貝到專案中即可使用。
上面說了那麼多,關鍵的也就這幾句:
Java12345 | mDataAdapter=newMenuAdapter();mDataAdapter.setDataList(dataList);mLRecyclerViewAdapter=newLRecyclerViewAdapter(this,mDataAdapter);mRecyclerView.setAdapter(mLRecyclerViewAdapter); |
下面具體分析每個功能。
左右兩側都有選單
效果圖:
具體使用步驟如下。
- 為SwipeRecyclerView的Item建立選單
Java123 // 設定選單建立器。mRecyclerView.setSwipeMenuCreator(swipeMenuCreator);//設定選單Item點選監聽事件 mRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);
其中swipeMenuCreator和menuItemClickListener程式碼如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 /** * 選單建立器。在Item要建立選單的時候呼叫。 */privateSwipeMenuCreator swipeMenuCreator=newSwipeMenuCreator(){@OverridepublicvoidonCreateMenu(SwipeMenu swipeLeftMenu,SwipeMenu swipeRightMenu,intviewType){intsize=getResources().getDimensionPixelSize(R.dimen.item_height);// 新增左側的,如果不新增,則左側不會出現選單。{SwipeMenuItem addItem=newSwipeMenuItem(mContext).setBackgroundDrawable(R.drawable.selector_green)// 點選的背景。.setImage(R.mipmap.ic_action_add)// 圖示。.setWidth(size)// 寬度。.setHeight(size);// 高度。swipeLeftMenu.addMenuItem(addItem);// 新增一個按鈕到左側選單。SwipeMenuItem closeItem=newSwipeMenuItem(mContext).setBackgroundDrawable(R.drawable.selector_red).setImage(R.mipmap.ic_action_close).setWidth(size).setHeight(size);swipeLeftMenu.addMenuItem(closeItem);// 新增一個按鈕到左側選單。}// 新增右側的,如果不新增,則右側不會出現選單。{SwipeMenuItem deleteItem=newSwipeMenuItem(mContext).setBackgroundDrawable(R.drawable.selector_red).setImage(R.mipmap.ic_action_delete).setText("刪除")// 文字,還可以設定文字顏色,大小等。。.setTextColor(Color.WHITE).setWidth(size).setHeight(size);swipeRightMenu.addMenuItem(deleteItem);// 新增一個按鈕到右側側選單。SwipeMenuItem closeItem=newSwipeMenuItem(mContext).setBackgroundDrawable(R.drawable.selector_purple).setImage(R.mipmap.ic_action_close).setWidth(size).setHeight(size);swipeRightMenu.addMenuItem(closeItem);// 新增一個按鈕到右側選單。SwipeMenuItem addItem=newSwipeMenuItem(mContext).setBackgroundDrawable(R.drawable.selector_green).setText("新增").setTextColor(Color.WHITE).setWidth(size).setHeight(size);swipeRightMenu.addMenuItem(addItem);// 新增一個按鈕到右側選單。}}};/** * 選單點選監聽。 */privateOnSwipeMenuItemClickListener menuItemClickListener=newOnSwipeMenuItemClickListener(){/** * Item的選單被點選的時候呼叫。 * @param closeable closeable. 用來關閉選單。 * @param adapterPosition adapterPosition. 這個選單所在的item在Adapter中position。 * @param menuPosition menuPosition. 這個選單的position。比如你為某個Item建立了2個MenuItem,那麼這個position可能是是 0、1, * @param direction 如果是左側選單,值是:SwipeMenuRecyclerView#LEFT_DIRECTION,如果是右側選單,值是:SwipeMenuRecyclerView#RIGHT_DIRECTION. */@OverridepublicvoidonItemClick(Closeable closeable,intadapterPosition,intmenuPosition,intdirection){closeable.smoothCloseMenu 相關推薦
Android LRecyclerView 實現側滑選單、長按拖拽等功能
LRecyclerView能做什麼? 經過再三思考,同時也為了大家使用方便,LRecyclerView集成了SwipeMenu系列功能,包括Item側滑選單、長按拖拽Item,滑動刪除Item等功能。 demo apk下載地址:點我下載 功能演示 本次新增SwipeMenu系
Android 實現側滑選單-design
google提供的Design開發包裡,有很多實用好看的新控制元件,這裡介紹下使用DrawerLayout+NavigationView實現側滑選單效果 要使用Design包,只要在專案的build.gradle中新增下依賴就好(記得更新SDK到最新版本)
Android DrawerLayout+ToolBar+NavigationView實現側滑選單效果,沉浸式狀態列
最近看到很多APP都使用了Android Support Library的DrawerLayout實現側滑效果,下面我就自己寫了一個Demo來實現,其中還用到了Toolbar,NavigationView,沉浸式狀態列效果 先看效果圖 新增依賴
Ruby+appium實現截圖、滑屏、長按、日誌輸出到本地文件夾
username 實例 方法 pytho 日誌 用戶名 read 清除 文件夾 require ‘rubygems‘ require ‘appium_lib‘require ‘date‘require ‘logger‘require ‘pathname‘require ‘t
Swift實現側滑選單SWRevealViewController
SWRevealViewController Github下載地址 匯入 我這裡直接新建一個SWRevealViewController包,然後把程式碼直接貼上進入 在橋接檔案中匯入 #import “SWRevealViewController.h”
iOS仿QQ側滑選單、登入按鈕動畫、仿鬥魚直播APP、城市選擇器、自動佈局等原始碼
iOS精選原始碼 QQ側滑選單,右滑選單,QQ展開選單,QQ好友分組 image 登入按鈕 image 3分鐘快捷建立高效能輪播圖 ScrollView巢狀ScrolloView(UITableView 、UICollectionView)解決方案
Toolbar 加 DrawerLayout 簡單使用實現側滑選單
佈局檔案 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout android:id="@+id/dw" android:layout_width="matc
簡單實現側滑選單
1.自定義viewgroup繼承horizonScrollview public class MySliding extends HorizontalScrollView { private int pwidth; LinearLayout par; b
mui實現側滑選單及主體部分上下滑動
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,
MUI 如何實現側滑選單及其主體部分上下滑動
在MUI文件的側滑選單介紹裡沒有說明如何實現側滑,而MUI側滑選單預設是沒有上下滑動功能的,需要啟用。 1、首先在 class="mui-scroll-wrapper" 的元素上新增ID: <!-- 側滑導航根容器 --> <div class="mui
DrawerLayout實現側滑選單
1 DrawerLayout說明 1.1繼承體系:java.lang.Object <-android.view.View <- android.view.ViewGroup <- android.support.v4.widget.Dra
SlidingMenu+Fragment實現側滑選單
實現SlidingMenu需要先匯入第三方slidingmenu.jar包。 複製 pan.baidu.com/s/1qW1525Q 到位址列。 主介面佈局 activity_main.xml <RelativeLayout xmlns:android="htt
Android仿QQ側滑(刪除、置頂等)功能
實現類似QQ滑動出現可操作項的功能,在網上看到有人自定義LinearLayout實現這個效果,但是靈活性有限。此demo使用開源專案SwipeLayout實現該功能。關於SwipeLayout的常用設定和屬性,這裡都做介紹,下面進入正題。 一、效果圖 二
Android RecyclerView實現側滑刪除
距上次寫部落格有半年多了,回憶起來都覺得不可思議,中間也想憋倆大招,總是被耽誤,這倆月忙完之後,終於空下來了,恰好新專案我和UI倆人商量一下,用MD來實現app。中間有個需求是RecyclerView中側滑顯示刪除按鈕,點選刪除。於是就有了這篇部落格。 一
利用ObjectAnimator實現側滑選單的效果
objectAnimator是一種焦點可以隨著動畫移動的動畫,下面用一個簡單的平移動畫的例子,來實現側滑選單。 首先是頁面主體程式碼: package com.example.myobjectanimation; import android.anim
Iwfu-NavigationView實現側滑選單
側滑選單已經司空見慣了,以前大多數app都使用slidingMenu,也有很多使用自定義的控制元件實現,後面有了support包的drawerLayout,這篇部落格裡我們使用Design包裡的NavigationView配合DrawerLayout實現側滑選單
DrawerLayout側滑選單、Toolbar和沉浸式狀態列的使用
最近在開發中需要用到側滑選單,以前使用的SlidingMenu,但似乎已經被Google淘汰了(過時了),於是乎使用了DrawerLayout來實現,既然是在專案使用的,那麼Toolbar和沉浸式狀態列也是要配合使用的,這裡做一下記錄。 我們先來看一看
Ruby+appium實現截圖、滑屏、長按、日誌輸出到本地資料夾
require 'rubygems' require 'appium_lib' require 'date' require 'logger' require 'pathname' require 'thread' require"fileutils" capa
[嵌入式開發模組]機械按鈕模組 純C語言 面向物件實現 按鍵消抖、長按、連擊
前言 嵌入式開發時,我們經常會用到各種機械按鈕,由於機械按鈕的抖動特性,一般需要保持一個狀態一段時間不變才能認為按鍵真的按下去/擡起來了,不然可能會出現明明只點擊了一下,效果確是連擊了好幾下的情況。另一方面,我們為了最大化的發揮按鈕的作用,還經常需要實現長按,連擊等功能
微信小程式——小實現(禁止頁面滾動、長按複製)
1. 禁止頁面滾動 對於小程式某些一屏的頁面,特別是全屏的swiper,並不希望頁面在豎直方向上可以滾動。 實現方式: 在需要禁止滾動頁面的json中加入: "disableScroll": true