问题描述
我在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();
}
1楼
根据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();
}
这里是定义这些标志的 。
2楼
问题在这里:
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);
每次您调用它时。