0

我正在研究一个布局,该布局在布局底部显示一个类似标签的结构。我需要在双击时显示,然后在 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();

}

但我不知道如何停止和重新启动这个计时器。我能怎么做?

4

1 回答 1

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 将在 5 秒后执行该代码。

编辑:

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);

     } 
于 2012-03-20T13:33:01.067 回答