首页 > 解决方案 > 使用 onTouchListener 查看不随手指移动

问题描述

我试图让View'sx 值随着手指在屏幕上拖动而移动。尽管视图移动很平滑,但它只移动了手指移动距离的约 1/3。在View我的情况下恰好是 a RecyclerView,但我认为这与问题无关。在以下实现中我做错了什么?

view.setOnTouchListener((v, event) -> {
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_UP:
                view.animate().translationX(0).setDuration(200);
                break;
            case MotionEvent.ACTION_MOVE:
                if (event.getHistorySize() < 1) break;
                final float latestX = event.getX(),
                        secondLatestX = event.getHistoricalX(event.getHistorySize() - 1),
                        firstX = event.getHistoricalX(0),
                        secondX = (event.getHistorySize() > 1) ?
                                event.getHistoricalX(1) : latestX;
                final float firstY = event.getHistoricalY(0),
                        secondY = (event.getHistorySize() > 1) ?
                                event.getHistoricalY(1) : event.getY();
                // if initial change x is greater than y
                if (Math.abs(secondX - firstX) > Math.abs(secondY - firstY)) {
                    view.setX(messageList.getX() + (latestX - secondLatestX));
                    return true;
                }
                break;
        }
        return false;
    });

如果代码需要一些解释:

我是否错误地计算了变量?我似乎无法在任何事情中找到逻辑问题。

标签: androidandroid-viewontouchlistenermotioneventontouch

解决方案


由于我找不到任何方法来做到这一点,所以我决定从头开始创建自己的库。这里是:

https://github.com/GregoryConrad/SlideDetector


推荐阅读