android在时间开始后取消超时功能

bzzcjhmw  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(271)

我希望按钮在我单击一个图像后5秒钟内可见,但是如果我在这5秒钟内再次单击图像,我不希望按钮在前5秒钟结束时隐藏,而是在后5秒钟结束时隐藏。所以基本上我想在超时开始后取消这个函数。这样的事可能吗?有没有其他方法可以达到同样的效果?
这是我正在使用的timeout方法函数。

@Override
public boolean onTouch(View v, MotionEvent event) {

    btnRemove.setVisibility(View.VISIBLE);

    final Handler handler = new Handler(Looper.getMainLooper());
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            btnRemove.setVisibility(View.GONE);
        }
    }, 5000);
}
dsekswqp

dsekswqp1#

确保 Handler 是示例变量,而不是局部变量,当 onTouch 方法返回。

private final Handler handler = new Handler(Looper.getMainLooper()); // instance variable

@Override
public boolean onTouch(View v, MotionEvent event) {

    btnRemove.setVisibility(View.VISIBLE);

    handler.removeCallbacksAndMessages(null); // remove previous Runnable - optional
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            btnRemove.setVisibility(View.GONE);
        }
    }, 5000);
}

在封闭类中的任何一点上,您都可以调用: handler.removeCallbacksAndMessages(null); 这将删除所有延迟/排队的 Runnable 物体。

相关问题