【问题标题】:View not moving with finger with onTouchListener使用 onTouchListener 查看不随手指移动
【发布时间】:2018-08-12 17:02:37
【问题描述】:

我试图让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


    【解决方案1】:

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

    https://github.com/GregoryConrad/SlideDetector

    【讨论】:

      【解决方案2】:

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

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

      ZoomIt

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-13
        相关资源
        最近更新 更多