2017-12-04 13 views
1

を変更し、私はアンドロイドのスタジオでピアノのアプリを作成しています:サウンド以前のビューよりも果たしているが

screenshot of app

を私が押されたときには、記録と再生を行うことになっている私の再生ボタンのクリックリスナーに持っていますボタンは表示されず、録音されたサウンドが再生されている間は停止ボタンが表示されます。

再生ボタン

mBtn_Play.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      mRecordingState = "Playing"; 
      switchButtonVisibility(); 

      for (final int sound: mListRecordedSounds) 
      { 
       if (mRecordingState == "Ready") 
       {//break out of loop when stop button is pressed 
        break; 
       } 
       else { 

        mSoundPool.play(sound, 1,1,1,0,1); 
        try 
        { 
         Thread.sleep(500); 
        } 
        catch (InterruptedException e) 
        { 
         e.printStackTrace(); 
        } 
       } 
      } 
     } 
    }); 
} 

ボタンの可視レコードと

private void switchButtonVisibility() 
{ 

    if (mRecordingState != "Ready") 
    { 
     mBtn_Stop.setVisibility(View.VISIBLE); 
     mBtn_Record.setVisibility(View.GONE); 
     mBtn_Play.setVisibility(View.GONE); 

    } 
    else 
    { 
     mBtn_Stop.setVisibility(View.GONE); 
     mBtn_Record.setVisibility(View.VISIBLE); 
     mBtn_Play.setVisibility(View.VISIBLE); 
    } 

} 

を切り替える方法とボタンを停止し、これは正しく

mBtn_Record.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      mListRecordedSounds.clear(); 
      mRecordingState = "Recording"; 
      switchButtonVisibility(); 

     } 
    }); 
mBtn_Stop.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      mRecordingState = "Ready"; 
      switchButtonVisibility(); 
     } 
    }); 
の作品210

いくつかの奇妙な理由のために、ループを最初に実行し、どのボタンが表示されるかを変更する前に音を再生しています。メソッドがループの上にあるので、これは意味をなさないと思われます。 ループが実行されてサウンドが再生される前に、ボタンの可視性が最初に変更されるように設定する方法はありますか?

答えて

1

実行を遅延し、ビューにイベントをポストします。これにより、ビューが更新されるとすぐにアクションが実行されることが保証されます。

 

    @Override 
    public void onClick(View v) { 
     mRecordingState = "Playing"; 
     switchButtonVisibility(); 

     mBtn_Play.post(new Runnable() { 
      @Override 
      public void run() { 
       for (final int sound : mListRecordedSounds) { 
        // play the sound here 
        ... 
       } 
      } 
     }); 
    } 
 
+0

ありがとうございます、アジズベキアンはあなたの問題を解決しました。 'mBtn_Play.post(新しいランナブル(){' mBtn_Stop.post(new Runnable(){'の代わりに' {' –

+0

ニース! – azizbekian

関連する問題