mcxtzhang / ZLayoutManager

Some custom LayoutManager .Such as SwipeCard、FLowLayout。一些自定义的LayoutManager,仿探探、人人影视 炫动滑动 卡片层叠 和流式布局等。
http://blog.csdn.net/zxt0601/article/details/53730908
2.53k stars 391 forks source link

从上下方向丢出去后无法确定是偏左还是偏右出去的,业务逻辑不好处理 #6

Open sereinli opened 7 years ago

mcxtzhang commented 7 years ago

官方未提供相应接口or方法供我们设置,不过我利用几个threshold值进行了判断,测了一会能基本完成功能,代码已更新。 设置仿探探竖直上下滑动,不删除Item。

水平方向判断误差阈值x:

        final TanTanCallback callback = new TanTanCallback(mRv mAdapter mDatas);
        callback.setHorizontalDeviation(x);
andydevacc commented 7 years ago

@mcxtzhang 快速向上滑动,还是可以删除卡片~

mcxtzhang commented 7 years ago

roger 看来我要使出绝招了,预计今晚回家解决。

mcxtzhang commented 7 years ago

要不你先试试加大阈值的值,我这里已经很快速了也没复现。是否是水平方向的滑动距离超过了阈值

mcxtzhang commented 7 years ago

手都滑破了也没复现出来,参考探探和本例几乎一样了,目前这种解决方案,除非你的滑动速度大于Float.MAX_VALUE. 否则是滑动不出去的。 滑动出去都是手斜了 ,水平的速度过大超过阈值。你可以调节水平距离的阈值到一个很大的值,这样排除水平滑动的干扰,再试一下。如果还有问题 再告诉我 最好可以录个gif啥的

mcxtzhang commented 7 years ago
        final TanTanCallback callback = new TanTanCallback(mRv, mAdapter, mDatas);

        callback.setHorizontalDeviation(Integer.MAX_VALUE);

        final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
        itemTouchHelper.attachToRecyclerView(mRv);
andydevacc commented 7 years ago

@mcxtzhang 确实是水平滑动的干扰,如果将卡片从左下角往右上角拖动,就会出现问题了

mcxtzhang commented 7 years ago

是的 此种情况在探探的APP里 也已经算是 喜欢 or 不喜欢 了。所以不影响任何逻辑判断的。

andydevacc commented 7 years ago

@mcxtzhang 这样还是有问题的,比如左滑不喜欢,右滑喜欢,如果按照现在这种处理方式,无法判断是左上,还是右上,因为onSwiped只会回调direction=1 (UP)

mcxtzhang commented 7 years ago

查看最近代码,我在 onChildDraw 里 加了一个判断,可以得出topView在页面上显示的最后一刻时的位置靠左还是靠右。isLeftSwipe保存这个信息,在onSwipe里可以

        if (isLeftSwipe){
            Toast.makeText(mRv.getContext(), "左滑删除", Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(mRv.getContext(), "右滑删除", Toast.LENGTH_SHORT).show();
        }
andydevacc commented 7 years ago

@mcxtzhang 嗯,这样确实是个workaround~ 其实如果有时间的话,用OnItemTouchListener(配合ViewDragHelper)去实现child view的触摸事件会更好控制

andydevacc commented 7 years ago

@mcxtzhang 另外,LayoutManger系列的文章让我受益匪浅啊,谢谢~

mcxtzhang commented 7 years ago

是的,这种解法不够优雅,我心中的最佳方案是 copy出ItemTouchHelper ,进行相应改动拓展,部分方法改成public or protected,以便子类重写。 现在由于一些包权限 private权限,限制,其实相应的方法ItemTouchHelper源码里也都有。 前几天初步试了一下 能达到相应效果。(这也是我上面提到的 我心中的终极解法) 另外,你提到的OnItemTouchListener感觉也不错, 看来解法很多,哈哈。感受开源的力量,开拓思维哈。