https://github.com/yanzhenjie/SwipeRecyclerView
我用的是侧滑功能哦,其他的没用,所有我展示的也是侧滑的功能,其他的详情功能去github上找吧,挺详细的。
使用方法:
依赖:
implementation 'com.yanzhenjie:recyclerview-swipe:1.2.0'
界面展示:
1.png 2.png
解决问题:
我做的功能是,侧滑可以删除,编辑也可以删除。
但是在编辑的时候,要禁止recycleview滑动删除,在侧滑的时候,点击编辑(图中被我点完了,变成完成了,删除完了就是编辑了),要关闭侧滑。
显然源码上,只添加了可是删除的功能,没有禁止滑动删除的功能,这个要自己来判断咯。
重写recycleview,判断一下是否在编辑状态,拦截一下手势功能,具体代码里都有写哦。直接用也可以,在封装一下也可以。
代码实现:
CollectionRecyclerView .java(重写的recycleview)
public class CollectionRecyclerView extends SwipeMenuRecyclerView {
/**
* 是否为编辑状态,如果为编辑状态则所有的List触摸失效
*/
private boolean canEditState = false;
private GestureDetector mGestureDetector;
public CollectionRecyclerView(Context context) {
super(context);
initGestureDetector();
}
public CollectionRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
initGestureDetector();
}
public CollectionRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initGestureDetector();
}
private void initGestureDetector() {
mGestureDetector = new GestureDetector(new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
int x1 = (int) e1.getX();
int x2 = (int) e2.getX();
if (x1 - x2 > 10 || x2 - x1 > 10) {
return canEditState;
} else {
return false;
}
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
});
}
/**
* 停用滑动菜单
*/
public void stopSlideMenu() {
canEditState = true;
}
/**
* 启动滑动菜单
*/
public void openSlideMenu() {
canEditState = false;
}
public void closeMenu() {
if (mOldSwipedLayout != null && mOldSwipedLayout.isMenuOpen()) {
mOldSwipedLayout.smoothCloseMenu();
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
if (mGestureDetector.onTouchEvent(e)) {
return true;
} else {
return super.onInterceptTouchEvent(e);
}
}
}
网友评论