我有一个布局(一个表格布局)。每当用户执行“向下”手势时,都需要调用特定函数。但是,ontouchlistener 会立即捕获事件,而不是等到用户执行正确的“下拉”手势。
我的代码是:
homePageTableLayout.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
if ((event.getAction() == MotionEvent.ACTION_DOWN)) {
startSyncData();
}
return true;
}
});
目前,正在发生的是立即调用 startSyncData() 函数。 最终结果应该有点类似于 android 常用的“pulltorefresh”库,但在这个用例中,我不必更新 View 。我只需要将一些数据发布到服务器。 我无法使用“pulltorefresh”库,因为它不支持“拉取”表格布局。我尝试将表格布局放在 ScrollView 中,但这只会破坏 UI。
最佳答案
您可以尝试在 ACTION_MOVE
或 ACTION_UP
中执行此操作 - 如果您需要仅在向下滑动手势时执行此操作,这应该会有所帮助,引入四个全局 float
:x, y, x1, y1
,然后在ACTION_DOWN
中:
x = event.getX();
y = event.getY();
ACTION_MOVE
或 ACTION_UP
:
x1 = event.getX();
y1 = event.getY();
然后在 ACTION_UP
中:
if (y1 > y) { //pointer moved down (y = 0 is at the top of the screen)
startSyncData();
}
关于android - Android 中的 MotionEvent.ACTION_DOWN 过于敏感。即使只是触摸屏幕片刻,也会收到此事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29792496/