【发布时间】: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 值 (例如,下次onTouch被ACTION_MOVE解雇) -
latestX是手指最近的 x 值 -
secondLatestX是手指的第二个最近的 x 值 - 所有 y 变量都是 与它们的 x 对应部分相同,但在 y 方向上
我是否错误地计算了变量?我似乎找不到任何逻辑问题。
【问题讨论】:
标签: android android-view ontouchlistener motionevent ontouch