gpt4 book ai didi

android - 检测布局外的触摸事件

转载 作者:行者123 更新时间:2023-11-30 04:02:20 25 4
gpt4 key购买 nike

我正在使用我在某处找到的开源数字选择器(归功于 Jeffrey F. Cole),但我刚刚发现了一个错误。

数字选择器有一个处理程序,可以在您触摸按钮时更快地增加数字

long`private Handler repeatUpdateHandler = new Handler();

`

    class RepetetiveUpdater implements Runnable {
public void run() {
if (autoIncrement) {
increment();
repeatUpdateHandler.postDelayed(new RepetetiveUpdater(),
REPEAT_DELAY);
} else if (autoDecrement) {
decrement();
repeatUpdateHandler.postDelayed(new RepetetiveUpdater(),
REPEAT_DELAY);
}
}
}

.....

public class NumberPicker extends LinearLayout {

.....

// Auto increment for a long click
increment.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View arg0) {
autoIncrement = true;
repeatUpdateHandler.post(new RepetetiveUpdater());
return false;
}
});

// When the button is released, if we're auto incrementing, stop
increment.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP && autoIncrement) {
autoIncrement = false;
}
return false;
}
});

问题是,当您长按按钮时,计数器开始增加,但是当您按住手指并在屏幕上拖动手指时,即使您抬起手指,计数器也会继续增加。

那么我怎样才能检测到手指离开我的数字选择器布局并停止计数器呢?

谢谢 :)

最佳答案

我不太确定这是一个错误,我什至不确定它是否来自此数字选择器在 API 本身的数字选择器之上所做的更改。我假设处理选择器递增和递减的按钮设置为继续运行,直到收到 ACTION_UP MotionEvent,但这可能过于简化了。

编辑:

我已经在 Android 2.3.3 上对此进行了测试,这正是结果。

编辑:

根据您在评论中的说明,这听起来确实是一个非常糟糕的错误。看起来您需要做的是让处理程序删除对 ACTION_UP 中可运行对象的回调。您可以将我链接到该项目,以便我可以尝试提交补丁吗?

编辑

您提供的 NumberPicker 没有正确使用 Handlers,IMO。不是保留对同一个处理程序的引用以便以后可以删除回调,而是在每次发布时创建一个新的。我做了一些更改并解决了这里的问题:https://gist.github.com/3657989

关于android - 检测布局外的触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12302145/

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