側滑對於Android來講實現方式多種多樣,可是具體那種方式能知足咱們的需求和適用場景那就很難說了,曾試過繼承RecyclerView,自定義Adapter等方法,可是效果並非很理想.最終定製版的WItemTouchHelperPlus符合了大部分的側滑需求,它來自系統類的改造.下面來看下實現的效果.
java
ItemTouchHelper是Android系統提供的一個幫助類,能夠很輕鬆的用它實現長按拖拽和側滑刪除功能(這裏的是側滑以後直接刪除整條Item),下面來看一下使用方法.android
咱們須要繼承ItemTouchHelper.Callback來實現本身的邏輯.我先大體的介紹一下具體的使用方法,詳情還請自行查資料.請看代碼:git
/**
* 實現本身的邏輯
* Created by WANG on 18/3/14.
*/
public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
//是否支持側滑
@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
return makeMovementFlags(0, ItemTouchHelper.START);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
return;
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
}
}
//這裏給RecyclerView設置一下就OK拉
ItemTouchHelperCallback touchHelperCallback = new ItemTouchHelperCallback();
ItemTouchHelper itemTouchHelper=newItemTouchHelper(touchHelperCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
複製代碼
下面是我目前發現的系統的ItemTouchHelper的一些弊端和好處:
github
弊端:json
好處:bash
//接口
public interface Extension {
float getActionWidth();
}
**********************Viewholder***********************
/**
* view.getWidth()獲取的是屏幕中能夠看到的大小.
*/
public class RecViewholder extends RecyclerView.ViewHolder implements Extension {
public TextView textView;
public TextView slide;
public RecViewholder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.item_text);
slide = itemView.findViewById(R.id.item_slide);
}
@Override
public float getActionWidth() {
return slide.getWidth();
}
}
複製代碼
//這個標識的佈局就是咱們能滑動的佈局.
<TextView
android:id="@+id/item_text"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#e1e1e1"
android:gravity="center"
android:tag="slide_flag"
android:text="item"
android:textColor="#333333"
android:textSize="16sp" />
複製代碼
@Override
public String getItemSlideType() {
return type;
}
複製代碼
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
if (viewHolder instanceof RecAdapter.RecViewholder) {
RecAdapter.RecViewholder holder = (RecAdapter.RecViewholder) viewHolder;
float actionWidth = holder.getActionWidth();
if (dX < -actionWidth) {
dX = -actionWidth;
}
holder.slideItem.setTranslationX(dX);
}else if(viewHolder instanceof RecOtherTypeAdapter.RecViewholder){
RecOtherTypeAdapter.RecViewholder holder = (RecOtherTypeAdapter.RecViewholder) viewHolder;
float actionWidth = holder.getActionWidth();
if (dX < -actionWidth) {
dX = -actionWidth;
}
holder.textView.setTranslationX(dX);
}
return;
}
複製代碼
而後就是使用咱們改進版的WItemTouchHelperPlus.Callback和WItemTouchHelperPlus來實現側滑.基本使用和系統類別無差別.源碼至關多,這裏就再也不貼出具體能夠去Github歡迎startapp
這裏只是大概的介紹了一下定製版WItemTouchHelperPlus和系統類的一些不一樣,以及定製版的一些用法,但願你們多多指導文章中出現的錯誤,歡迎你們的反饋,歡迎評論吐槽哦~
ide
若是你們須要WItemTouchHelperPlus或者系統類ItemTouchHelper的源碼解釋的話請評論區留言哦~ 謝謝各位看官!
歡迎你們關注
個人掘金
個人CSDN
個人簡書
Github
佈局