android - 使用 onTouchListener 查看不随手指移动
问题描述
我试图让View
'sx 值随着手指在屏幕上拖动而移动。尽管视图移动很平滑,但它只移动了手指移动距离的约 1/3。在View
我的情况下恰好是 a 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 方向
我是否错误地计算了变量?我似乎无法在任何事情中找到逻辑问题。
解决方案
由于我找不到任何方法来做到这一点,所以我决定从头开始创建自己的库。这里是:
推荐阅读
- angular - 在 keycloak 上返回导航后启动隐式流程不起作用
- c++ - 随着计算的进行,我的 C++ 程序变慢
- implicit - GADT 数据构造函数参数如何在 Idris 中工作?
- java - Oracle ADF 应用程序中的慢速查看对象?
- java - Java中的Thread类是静态的吗?
- wechat - 微信access_token:appid无效(错误40013)
- java - 如何在 CrudRepository hibernate 中处理 JSON_VAL() 结果集
- npm - @webpack-cli/init npm 安装失败 [webpack-cli]
- php - 如何在检查发货时禁用某些付款 Wordpress Woocommerce
- mysql - 找不到列:1054 'where 子句'中的未知列'`default`,查询是:SELECT`main_table`。* FROM`fastimporter_attributes`