使用onTouchListener查看不能用手指移动

问题描述 投票:1回答:2

我试图让View的x值随着它在屏幕上拖动而用手指移动。尽管视图移动是平滑的,但它仅移动手指距离的约1/3。在我的情况下View碰巧是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;
    });

如果代码需要一些解释:

  • firstX是手指在屏幕上触摸的第一个x值
  • secondX是手指触摸屏幕的第二个x值(如下一次onTouchACTION_MOVE发射)
  • latestX是手指的最新x值
  • secondLatestX是手指第二个最近的x值
  • 所有y变量都与它们的x对应部分相同,但在y方向上

我不正确地计算变量吗?我似乎无法在任何事情上找到逻辑问题。

android android-view ontouchlistener motionevent ontouch
2个回答
0
投票

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

https://github.com/GregoryConrad/SlideDetector


0
投票

从您的用例中我可以理解的是,您希望根据您的触摸移动视图。

查看我的项目长按并在无限视图中移动方块。

ZoomIt

© www.soinside.com 2019 - 2024. All rights reserved.