java - 滑动手势材料设计
问题描述
我正在阅读Cards - 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
如果您想自己实现它,请查看库本身的代码。
推荐阅读
- reactjs - 使用文件夹名称解析 Typescript 文件
- oracle - PLSQL 文本字符串中的与号作为 Tableau 的数据源
- python - 在 Python 中使用 seaborn 制作实心轮廓
- kubernetes - Kubernetes - API Server / etcd 如何知道每个 Pod 的状态?
- reactjs - redux-form 不适用于 gatsby.js 上的登录表单
- ios - 在iOS中的两个对齐标签中调整文本大小
- security - Symfony 4:无法访问管理员角色。拒绝访问
- django - 带有窗口函数的 Django ORM 子查询
- r - 转换为事务规则时出现错误“只能使用原子组件强制列表”
- javascript - 响应式粘性汉堡导航栏