这个问题通常是由于没有正确处理ACTION_UP事件所致。为了解决这个问题,需要在OnTouchListener中添加以下内容:
button.setOnTouchListener(new View.OnTouchListener() {
int counter = 0;
Handler repeatUpdateHandler = new Handler();
Runnable repeatUpdateRunnable = new Runnable() {
@Override
public void run() {
if (button.isPressed()) {
counter++;
repeatUpdateHandler.postDelayed(repeatUpdateRunnable, 100);
}
}
};
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
counter = 0;
repeatUpdateHandler.postDelayed(repeatUpdateRunnable, 100);
break;
case MotionEvent.ACTION_UP:
repeatUpdateHandler.removeCallbacks(repeatUpdateRunnable);
break;
}
return false;
}
});
这里,我们使用了一个计数器来记录用户按下按钮的次数,并使用一个Handler来每隔一段时间递增计数器。如果用户停止按按钮,则删除计时器。