当前位置: 代码迷 >> Android >> 在CountDownTimer的onFinish()函数中调用mMediaRecorder.start()之后,仍然显示Toast信息的屏幕,为什么?
  详细解决方案

在CountDownTimer的onFinish()函数中调用mMediaRecorder.start()之后,仍然显示Toast信息的屏幕,为什么?

热度:50   发布时间:2023-08-04 12:02:52.0

我在CountDownTimer中的onTick函数中使用Toast.makeText来提示用户剩余时间,然后再开始记录屏幕。

在我看来,mMediaRecorder.start()将在Toast.makeText的信息消失后开始工作,但实际上,视频记录了Toast.makeText()的信息。

似乎Toast的窗口是异步显示的,如何在Toast的窗口完全消失之后使mMediaRecorder.start()工作? 谢谢!

private void DelayStartRecord(RecordArg mRecordArg){
            new  CountDownTimer(10*1000, 1000) {

            public void onTick(long millisUntilFinished) {

                String s="seconds remaining: " + millisUntilFinished / 1000;
                Toast.makeText(mContext,s,Toast.LENGTH_SHORT).show();
            }

            public void onFinish() {
                mMediaRecorder.start();
            }

        }.start();
}

根据android文档。 Toast.LENGTH_SHORT将显示吐司2秒钟。

private static final int SHORT_DELAY = 2000; // 2 seconds

您将在1秒钟后显示每个吐司,此处每个吐司需要2秒钟。 这就是为什么即使在倒计时结束后,吐司仍然存在的原因。

快速解决:

 private Toast mToastText;     
 private void DelayStartRecord(RecordArg mRecordArg){
                new  CountDownTimer(10*1000, 1000) {

                public void onTick(long millisUntilFinished) {
                    String s="seconds remaining: " + millisUntilFinished / 1000;
                    if(mToastText==null){
                       mToastText = Toast.makeText(activity, "", Toast.LENGTH_SHORT);
                    }                    
                    mToastText.setText(s);
                    mToastText.show();
                }

                public void onFinish() {
                    if(mToastText!=null){
                      mToastText.cancel();
                    }
                    mMediaRecorder.start();
                }

            }.start();
    }

这里是定义这些标志的 。

问题在这里:

Toast.makeText(mContext,s,Toast.LENGTH_SHORT).show();

LENGTH_SHORT的持续时间为2.5秒。 您想每1秒显示一次Toast的位置。 因此,所有10个Toast(10到1秒)都在队列中,每个显示2.5秒。 因此,即使在倒数10秒后,Toast仍会继续显示15秒。

您可以执行以下操作:在CountDownTimer旁边创建Toast并使用

toast.cancel;
String s="seconds remaining: " + millisUntilFinished / 1000;
toast.setText(s);
toast.show();

您可以检查makeText方法,该方法创建一个新的Toast Toast result = new Toast(context); 每次您调用它时。

  相关解决方案