Возможно, вы захотите затемнить / включить звук вместо того, чтобы сразу установить его на полную (1.0f) или нулевую (0.0f) громкость.
Это немного сложно, потому что вам нужна асинхронная задачачтобы ваше приложение реагировало:
mpMain - это мой экземпляр MediaPlayer для воспроизведения фоновой музыки.Я также забочусь об этом в OnPause () и OnResume ().
Метод playBackgroundMusic используется для включения музыки, fadeOutBackgroundMusic отключает музыку, но путем уменьшения громкости на 0,5 секунды (10 * 50, см.и Thread.sleep).
Мой базовый том равен 0,8f, вы можете сделать это параметром асинхронной задачи или использовать статическую глобальную переменную.
public void playBackgroundMusic( Boolean isOn ){
if(isOn){
// prevent conflics with async fade-out task
if(mtask_fadeout_music!=null){
mtask_fadeout_music.cancel(true);
mtask_fadeout_music=null;
}
if(mpMain==null){
mpMain = MediaPlayer.create(this, R.raw.zin___piano_2_140bpm_32158);
mpMain.setLooping(true);
mpMain.setVolume(0.8f,0.8f);
mpMain.start();
}
}
else{
if(mtask_fadeout_music==null){
fadeOutBackgroundMusic();
}
}
}
public void fadeOutBackgroundMusic(){
mtask_fadeout_music = (FadeOutMusic)new FadeOutMusic( ).execute( );
}
//
// background processing ... fade out music stream
//
public class FadeOutMusic extends AsyncTask<String,Integer,String> {
@Override
protected String doInBackground(String... args) {
float level = 0.8f;
int i = 1;
while(i<50){
i++;
if(mpMain != null){
level=level*0.9f;
mpMain.setVolume(level, level);
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "dummy";
}
@Override
protected void onPostExecute( String dummy ) {
if(mpMain != null){
mpMain.setVolume(0,0);
mpMain.release();
mpMain = null;
}
if(mtask_fadeout_music!=null){
mtask_fadeout_music = null;
}
}
@Override
public void onCancelled() {
if(mpMain != null){
mpMain.setVolume(0,0);
mpMain.release();
mpMain = null;
}
if(mtask_fadeout_music!=null){
mtask_fadeout_music = null;
}
}
}