2016-06-18 11 views
1

私はオーディオを記録するアプリケーションを作成しています。長い時間録音した場合は、そのヘッダ(Waveファイル)を書き込むのに数分かかります。それが起こっている間に進行状況バーを表示したいが、それは表示されません。メソッドを実行している間、UIが止まっているようです。 メソッドの実行中にプログレスバーを表示

この

は、あなたが「録画停止」をクリックしたときのためのコードです:

   ProgressBar Bar = (ProgressBar)findViewById(R.id.Bar); 
       TextView loadingTxt = (TextView)findViewById(R.id.loading); 
       Bar.setVisibility(View.VISIBLE); 
       loadingTxt.setAlpha(1f); 
       AppLog.logString("Stop Recording"); 
       stopRecording(); 
       Toast.makeText(getApplicationContext(), R.string.stoppedRecording, Toast.LENGTH_LONG).show(); 
       Bar.setVisibility(View.GONE); 
       loadingTxt.setAlpha(0f); 

MethodeののstopRecording()を実行するためには時間がかかる、と私はプログレスバーがその時に示したいと思います。 どうすれば修正できますか?

答えて

2

ここではAsyncTaskを使用する必要があります。別のスレッドでdoInBackgroundメソッドが呼び出されるため、バックグラウンドスレッドで大量の操作が行われます。

final ProgressBar Bar = (ProgressBar)findViewById(R.id.Bar); 
    final TextView loadingTxt = (TextView)findViewById(R.id.loading); 
new AsyncTask<Void, Void, Void>() { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     Bar.setVisibility(View.VISIBLE); 
     loadingTxt.setAlpha(1f); 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     //Toast.makeText(getApplicationContext(), R.string.stoppedRecording, Toast.LENGTH_LONG).show(); 
     Bar.setVisibility(View.GONE); 
     loadingTxt.setAlpha(0f); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     stopRecording(); 
     return null; 
    } 
}.execute(); 
+0

これは機能しました。ありがとうございました!! –

+0

あなたは大歓迎です! –

関連する問題