我有一个应用程序,我需要在每次触摸ImageButton后延迟。
我尝试了Thread.sleep()方法,但我不确定这是否是处理它的最佳方法。
你们推荐什么?
感谢任何帮助!
还有一件事:我想要触发onTouch()事件的内容然后我想在下一个onTouch()事件中延迟“X”秒。这样可以防止用户在按钮中点击太多次。
答案 0 :(得分:3)
由于所有触摸事件都由UI线程处理,Thread.sleep()
将阻止您的UI线程(我希望)不是您正在寻找的。
我认为解决问题的最正确方法是在postDelayed(Runnable, long)
处理程序中使用onClick
接口,这样可以延迟执行:
@Override
public void onClick(View v)
{
postDelayed(new Runnable()
{
@Override
public void run()
{
// do your stuff here
}
}, 10000); //10sec delay
}
更新:
如果您希望用户阻止您在图片视图上点击过快,我强烈建议您使用onClick
而不是onTouch
(除非有充分理由)
但是,请参阅可能对您有帮助的代码段:
private boolean blocked = false;
private Handler handler = new Handler();
@Override
public boolean onTouchEvent(MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
if (!blocked)
{
blocked = true;
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
blocked = false;
}
}, 1000);
} else
{
return false;
}
}
return super.onTouchEvent(event);
}