我试图使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值我计算的变量不正确吗?我似乎找不到任何逻辑问题。
答案 0 :(得分:0)
由于找不到任何方法,因此我决定从头开始创建自己的库。在这里:
答案 1 :(得分:0)