我为视频播放器创建了一个自定义控制面板。现在我想给出一个像默认MediaController的效果,当触摸屏幕时面板变得可见,并且在最后一次触摸时间之后它再次变得不可见。我可以使用这种类型的代码。
Thread thread = new Thread() {
@Override
public void run() {
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
}
runOnUiThread(new Runnable() {
@Override
public void run() {
// make the panel invisible
}
});
}
};
我可以在触摸屏幕时启动线程,并在60秒后使其不可见。但在我的情况下,如果用户在这60秒之间再次触摸屏幕,则面板应在最后一次触摸后60秒后消失。如何考虑这个案例?
答案 0 :(得分:1)
我建议使用Runnable
和Handler
的组合。您可以使用Handler
进行postDelayed()
次呼叫,例如60秒后执行某些操作。
以下是一个例子:
private Handler mHandler = new Handler();
mHandler.post(showControls); // Call this to show the controls
private Runnable showControls = new Runnable() {
public void run() {
// Code to show controls
mHandler.removeCallbacks(showControls);
mHandler.postDelayed(hideControls, 60000);
}
};
private Runnable hideControls = new Runnable() {
public void run() {
// Code to hide the controls
}
};
答案 1 :(得分:1)
只需删除/取消当前计时器。
顺便说一句,你不应该通过Thread来做,而是通过向Handler发布消息。这样的未来计时器任务不需要另一个线程。