gpt4 book ai didi

android - ScrollView 中的 View 中的 OnTouchListener

转载 作者:行者123 更新时间:2023-11-30 05:07:32 28 4
gpt4 key购买 nike

我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的:

final Runnable vibrate = new Runnable() {
public void run() {
vibrate();
}
};

theView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
final ScheduledFuture<?> vibrateHandle =
scheduler.scheduleAtFixedRate(vibrate, 0, 80, MILLISECONDS);
vibrateHanlers.add(vibrateHandle);
return true;
}
if (motionEvent.getAction() == MotionEvent.ACTION_CANCEL
|| motionEvent.getAction() == MotionEvent.ACTION_UP) {
clearAllScheduledFutures();
return false;
}
return true;
}
});

问题是,ACTION_CANCEL 是为手指的最小移动而调用的。我知道这是因为 View 位于 ScrollView 内,但我不确定我在这里有什么选择。我是否创建自定义 ScrollView,并尝试查找是否触摸了所需的 View 并禁用 ScrollView 的触摸事件?或者,为小的移动阈值禁用 SrollView 的触摸事件?还是别的?

最佳答案

您能否尝试在 ActionUp 事件中返回 true 而不是 false,这样该事件被视为已消耗

if (motionEvent.getAction() == MotionEvent.ACTION_CANCEL
|| motionEvent.getAction() == MotionEvent.ACTION_UP) {
clearAllScheduledFutures();
return true;
}

关于android - ScrollView 中的 View 中的 OnTouchListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54306299/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com