使用 onTouchListener 查看手指不移动
View not moving with finger with onTouchListener
我正在尝试使 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值
(例如,下一次 onTouch
被 ACTION_MOVE
触发)
latestX
是手指最近的x值
secondLatestX
是手指的倒数第二个x值
- 所有y变量都是
与它们的 x 对应部分相同,但在 y 方向
我计算的变量不正确吗?我似乎找不到任何逻辑问题。
因为我找不到任何方法来做到这一点,所以我决定从头开始创建我自己的库。这是:
根据您的用例,我可以理解的是您想根据您的触摸移动视图。
查看我的项目长按并在无限视图中移动正方形。
我正在尝试使 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值 (例如,下一次onTouch
被ACTION_MOVE
触发)latestX
是手指最近的x值secondLatestX
是手指的倒数第二个x值- 所有y变量都是 与它们的 x 对应部分相同,但在 y 方向
我计算的变量不正确吗?我似乎找不到任何逻辑问题。
因为我找不到任何方法来做到这一点,所以我决定从头开始创建我自己的库。这是:
根据您的用例,我可以理解的是您想根据您的触摸移动视图。
查看我的项目长按并在无限视图中移动正方形。