ZLayoutManager icon indicating copy to clipboard operation
ZLayoutManager copied to clipboard

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

Open sereinli opened this issue 8 years ago • 13 comments

sereinli avatar Dec 21 '16 09:12 sereinli

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

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

        final TanTanCallback callback = new TanTanCallback(mRv mAdapter mDatas);
        callback.setHorizontalDeviation(x);

mcxtzhang avatar Dec 26 '16 15:12 mcxtzhang

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

andydevacc avatar Dec 28 '16 02:12 andydevacc

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

mcxtzhang avatar Dec 28 '16 04:12 mcxtzhang

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

mcxtzhang avatar Dec 28 '16 04:12 mcxtzhang

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

mcxtzhang avatar Dec 28 '16 04:12 mcxtzhang

        final TanTanCallback callback = new TanTanCallback(mRv, mAdapter, mDatas);

        callback.setHorizontalDeviation(Integer.MAX_VALUE);

        final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
        itemTouchHelper.attachToRecyclerView(mRv);

mcxtzhang avatar Dec 28 '16 04:12 mcxtzhang

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

andydevacc avatar Dec 28 '16 06:12 andydevacc

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

mcxtzhang avatar Dec 28 '16 08:12 mcxtzhang

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

andydevacc avatar Dec 28 '16 08:12 andydevacc

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

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

mcxtzhang avatar Dec 28 '16 12:12 mcxtzhang

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

andydevacc avatar Dec 29 '16 02:12 andydevacc

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

andydevacc avatar Dec 29 '16 02:12 andydevacc

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

mcxtzhang avatar Dec 29 '16 02:12 mcxtzhang