我试图让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值我不正确地计算变量吗?我似乎无法在任何事情上找到逻辑问题。
由于我找不到任何方法,我只是决定从头开始创建自己的库。这里是: