ZLayoutManager
ZLayoutManager copied to clipboard
从上下方向丢出去后无法确定是偏左还是偏右出去的,业务逻辑不好处理
官方未提供相应接口or方法供我们设置,不过我利用几个threshold值进行了判断,测了一会能基本完成功能,代码已更新。 设置仿探探竖直上下滑动,不删除Item。
水平方向判断误差阈值x:
final TanTanCallback callback = new TanTanCallback(mRv mAdapter mDatas);
callback.setHorizontalDeviation(x);
@mcxtzhang 快速向上滑动,还是可以删除卡片~
roger 看来我要使出绝招了,预计今晚回家解决。
要不你先试试加大阈值的值,我这里已经很快速了也没复现。是否是水平方向的滑动距离超过了阈值
手都滑破了也没复现出来,参考探探和本例几乎一样了,目前这种解决方案,除非你的滑动速度大于Float.MAX_VALUE. 否则是滑动不出去的。 滑动出去都是手斜了 ,水平的速度过大超过阈值。你可以调节水平距离的阈值到一个很大的值,这样排除水平滑动的干扰,再试一下。如果还有问题 再告诉我 最好可以录个gif啥的
final TanTanCallback callback = new TanTanCallback(mRv, mAdapter, mDatas);
callback.setHorizontalDeviation(Integer.MAX_VALUE);
final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
itemTouchHelper.attachToRecyclerView(mRv);
@mcxtzhang 确实是水平滑动的干扰,如果将卡片从左下角往右上角拖动,就会出现问题了
是的 此种情况在探探的APP里 也已经算是 喜欢 or 不喜欢 了。所以不影响任何逻辑判断的。
@mcxtzhang 这样还是有问题的,比如左滑不喜欢,右滑喜欢,如果按照现在这种处理方式,无法判断是左上,还是右上,因为onSwiped只会回调direction=1 (UP)
查看最近代码,我在 onChildDraw 里 加了一个判断,可以得出topView在页面上显示的最后一刻时的位置靠左还是靠右。isLeftSwipe
保存这个信息,在onSwipe里可以
if (isLeftSwipe){
Toast.makeText(mRv.getContext(), "左滑删除", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(mRv.getContext(), "右滑删除", Toast.LENGTH_SHORT).show();
}
@mcxtzhang 嗯,这样确实是个workaround~ 其实如果有时间的话,用OnItemTouchListener(配合ViewDragHelper)去实现child view的触摸事件会更好控制
@mcxtzhang 另外,LayoutManger系列的文章让我受益匪浅啊,谢谢~
是的,这种解法不够优雅,我心中的最佳方案是 copy出ItemTouchHelper
,进行相应改动拓展,部分方法改成public or protected,以便子类重写。
现在由于一些包权限 private权限,限制,其实相应的方法ItemTouchHelper源码里也都有。
前几天初步试了一下 能达到相应效果。(这也是我上面提到的 我心中的终极解法)
另外,你提到的OnItemTouchListener
感觉也不错,
看来解法很多,哈哈。感受开源的力量,开拓思维哈。