Отображение прогресса записи с помощью круглого индикатора выполнения - PullRequest
0 голосов
/ 07 января 2019

Я занимаюсь разработкой нового приложения для Android. В моем приложении функция записи звука составляет 3 секунды. Я хочу показать круглый индикатор выполнения, чтобы показать прогресс записи. Запись автоматически останавливается через 3 сек. Это мой код, пожалуйста, помогите мне добавить индикатор выполнения.

 private void mStartRecordingAudio() {
        try {
            TemporaryModelCache.stopMediaPlayer();
            TemporaryModelCache.getAsyncInstance().cancel(true);
            TemporaryModelCache.clearAsyncInstance();
            mAudioRecorder = new MediaRecorder();
            mAudioRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
            mAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mAudioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
            String file_name = mFileToSaveAudio + "recording.3gp";
            mAudioRecorder.setOutputFile(file_name);
            mAudioRecorder.prepare();
            mAudioRecorder.start();
            mImageViewRecord.setImageResource(R.drawable.ic_button_recording);
            circularProgressBar.setVisibility(View.VISIBLE);
            mImagePlayOurs.setImageResource(R.drawable.ic_button_play_ours_disabled);
            mButtonPlayRecordedAudio.setImageResource(R.drawable.button_yours_disabled);
            mViewRecord.setEnabled(false);
            mViewPlayYours.setEnabled(false);
            mViewPlayOurs.setEnabled(false);

        } catch (IllegalStateException ise) {
            Log.e("error", ise.toString());
            // make something ...
        } catch (IOException ioe) {
            Log.e("error", ioe.toString());
            // make something
        }
        new Timer().schedule(new TimerTask() {

            @Override
            public void run() {
                activity.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        try {
                            mAudioRecorder.stop();
                            mAudioRecorder.reset();
                            mAudioRecorder.release();
                        } catch (RuntimeException stopException) {
                            //handle cleanup here
                        }
                        circularProgressBar.setVisibility(View.GONE);
                        mWowWordActionSounds.mPlayAudioButtonClick();
                        mIsAudioRecorded = true;
                        mButtonPlayRecordedAudio.setImageResource(R.drawable.ic_button_yours_png);
                        mImagePlayOurs.setImageResource(R.drawable.ic_btn_playours);
                        mImageViewRecord.setImageResource(R.drawable.ic_btn_record);
                        mViewPlayYours.setEnabled(true);
                        mViewPlayOurs.setEnabled(true);
                        mViewRecord.setEnabled(true);
                    }
                });

            }
        }, 3000);
}

1 Ответ

0 голосов
/ 07 января 2019

Вы не обновляете индикатор выполнения нигде в коде

Вы должны использовать roundProgressBar.setProgress (циркулярПрогрессБар.getProgress () + 1000); внутри бега ().

Но, на мой взгляд, вы должны использовать класс таймера обратного отсчета вместо планирования с Timer.schedule ().

Простой пример CountDownTimer, который будет выполнять задачу внутри onTick () через 1 секунду и вызывать onFinish () через 3 секунды

Вы можете разместить код для setProgress внутри onTick ().

new CountDownTimer(30000, 1000) {

 public void onTick(long millisUntilFinished) {
     mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
 }

 public void onFinish() {
     mTextField.setText("done!");
 }
  }.start();

Подробнее на: https://developer.android.com/reference/android/os/CountDownTimer

...