我正在制作一个布局,在布局的底部显示一个类似标签的结构。我需要双击显示,然后在5秒后隐藏它。所以我正在使用这个倒数计时器:
public void timer()
{
cdt=new CountDownTimer(5000,1000) {
@Override
public void onTick(long millisUntilFinished) {
System.out.println("Timer Working"+millisUntilFinished+"");
}
@Override
public void onFinish() {
System.out.println("Finished");
main =(LinearLayout)findViewById(R.id.parent);
ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams)main.getLayoutParams();
mlp.height=420;
set_up_views();
find_module();
tl.setVisibility(View.INVISIBLE);
}
}.start();
}
但我不知道如何停止并重新启动此计时器。我该怎么办?
答案 0 :(得分:1)
我建议你不要在这种情况下使用CountDownTimer。
使用Handler.postDelayed(Runnable runnable, long delay)
public class yourActivity extends Activity
{
public Handler handler = new Handler();
...
public void hideAfter5Sec()
{
handler.postDelayed(new Runnable()
{
View view = findViewById(view_to_hide);
view.setVisibility(View.INVISIBLE);
}, 5000);
}
}
postDelayed将在5Sec之后执行该代码。
<强>编辑:强>
postDelayed将在5秒后通过Lopper.loop()调用一次。如果有多次调用hideAfter5Sec(),那么只有你会多次调用postDelayed。
如果你有多个调用hideAfter5Sec()我不认为有任何错误,因为hideAfter5Sec()只是隐藏它。所以,如果一个或多个你的视图将被隐藏。
如果您只想在hideAfter5Sec()的最后一次调用中隐藏,请使用此变体。
public class yourActivity extends Activity
{
public Handler handler = new Handler();
public long lastHideAfter5Sec = 0L;
...
public void hideAfter5Sec()
{
lastHideAfter5Sec = System.currentTimeMillis();
handler.postDelayed(new Runnable()
{
if(System.currentTimeMillis() - lastHideAfter5Sec < 5000)
return;
View view = findViewById(view_to_hide);
view.setVisibility(View.INVISIBLE);
}, 5000);
}