使用onTouchListener不能用手指移动视图

时间:2018-08-12 17:02:38

标签: android android-view ontouchlistener motionevent ontouch

我试图使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方向上

我计算的变量不正确吗?我似乎找不到任何逻辑问题。

2 个答案:

答案 0 :(得分:0)

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

https://github.com/GregoryConrad/SlideDetector

答案 1 :(得分:0)

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

签出我的项目长按并在无限视图中移动正方形。

ZoomIt