[英]How can I implement swipe-to-delete gesture, exactly as shown in Material Design's documentation?
[英]Swipe gesture material design
我正在讀卡片-材料設計 。 我想在布局中實現滑動手勢,但與此同時我遇到了一些問題。
我當前使用ItemTouchHelper實施的問題是,項目始終總是從布局中完全刪除,我不希望這種情況發生,如上面的視頻所示,我希望允許布局以最大30%的比例向直接滑動。屏幕總寬度的百分比,如果用戶將其放到屏幕上,我希望它進行備份,以便布局返回到其默認位置(不會部分移動到側面)並且用戶達到30屏幕上的百分比,以執行操作(例如保存該項目以供以后觀看)並將該項目返回到其初始0%位置。 Whatsapp的功能與我想要的功能非常相似,當向右滑動消息時,您可以重新發送消息。
這是我的代碼
public class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback {
private RecyclerItemTouchHelperListener listener;
RecyclerView recyclerView;
public RecyclerItemTouchHelper(int dragDirs, int swipeDirs, RecyclerItemTouchHelperListener listener, RecyclerView recyclerView) {
super(dragDirs, swipeDirs);
this.listener = listener;
this.recyclerView = recyclerView;
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
Log.i("waeaweaweaeawe", "onMove");
return true;
}
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
Log.i("waeaweaweaeawe", "onSelectedChanged");
if (viewHolder != null) {
final View foregroundView = ((clv_exibirPosts.ViewHolder) viewHolder).container_post;
getDefaultUIUtil().onSelected(foregroundView);
}
}
@Override
public void onChildDrawOver(Canvas c, RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, float dX, float dY,
int actionState, boolean isCurrentlyActive) {
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
Log.i("waeaweaweaeawe", "clearView");
final View foregroundView = ((clv_exibirPosts.ViewHolder) viewHolder).container_post;
getDefaultUIUtil().clearView(foregroundView);
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, float dX, float dY,
int actionState, boolean isCurrentlyActive) {
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
Log.i("waeaweaweaeawe", "onSwiped");
}
@Override
public int convertToAbsoluteDirection(int flags, int layoutDirection) {
Log.i("waeaweaweaeawe", "convertToAbsoluteDirection");
return super.convertToAbsoluteDirection(flags, layoutDirection);
}
public interface RecyclerItemTouchHelperListener {
void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position);
}
}
我不知道如何設置可以拖動滑動手勢的最大距離。 我在stackOverflow中找到了它,這使我能夠使布局不完全退出屏幕
super.onChildDraw(c, recyclerView, viewHolder, dX / 2, dY, actionState, isCurrentlyActive);
但是這里有一些問題。
1-滑動速度慢。
2-當滑動到允許滑動的整個寬度的50%時,對象將繼續其位置更改,將其保持在最大允許位置(我希望該項目在達到允許滑動的50%之后始終返回0%。)
我在互聯網上四處張望,沒有找到有關此事的例子。 我敢肯定,這個問題不僅僅是我的。 如果您能給我一些提示,代碼示例,帖子,任何可能有幫助的信息,我將不勝感激!
我認為您需要的是這個庫https://github.com/yanzhenjie/SwipeRecyclerView
如果您想自己實現它 ,請查看 庫本身的代碼 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.