Приветствую.
Я сделал selector
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" android:drawable="@drawable/ic_action_play" />
<item android:state_checked="true" android:drawable="@drawable/ic_action_pause" />
Затем назначил его background
-ом в togglebutton
<ToggleButton
android:id="@+id/play"
android:layout_width="40dp"
android:layout_height="40dp"
android:textOn=""
android:textOff=""
android:text=""
android:background="@drawable/play_pause"
android:contentDescription="@string/play" />
Затем в своем activity
прописал следующий код
public class HeadsActivity extends AppCompatActivity {
MediaPlayer mediaPlayer;
Handler handler;
SeekBar seekBar;
ToggleButton play, replay;
int length = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_heads);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
handler = new Handler();
play = (ToggleButton) findViewById(R.id.play);
replay = (ToggleButton) findViewById(R.id.replay);
seekBar = (SeekBar) findViewById(R.id.seek);
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.my_sound);
length = mediaPlayer.getDuration();
seekBar.setMax(length);
handler.postDelayed(my_UpdateTimeTask, 100);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean input) {
if(mediaPlayer != null && input) {
mediaPlayer.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(play.isChecked()) {
mediaPlayer.start();
} else {
mediaPlayer.pause();
}
}
});
replay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(replay.isChecked()) {
mediaPlayer.setLooping(true);
} else {
mediaPlayer.setLooping(false);
}
}
});
}
private Runnable my_UpdateTimeTask = new Runnable() {
@Override
public void run() {
if(mediaPlayer.isPlaying()) {
int my_CurrentPosition = mediaPlayer.getCurrentPosition();
seekBar.setProgress(my_CurrentPosition);
} try {
handler.postDelayed(this, 1000);
} catch (Exception e) {
e.printStackTrace();
}
}
};
Теперь, когда я воспроизожу аудио, togglebutton
из состояния play
, переключается в состояние pause
и в этом все работает отлично, и также seekbar
передвигается в соответствии с аудио файлом. Но проблема в том, что когда аудио заканчивается, togglebutton
не переключает свое состояние, и остается во втором состоянии pause
, и нужно нажать раз, только потом переключается в состояние play
и нажав второй раз только тогда аудио воспроизводится вновь. Вопрос: Как мне по завершению аудио сменить состояние togglebutton
и как скинуть на ноль состояние линии seekbar
progress
?
Добавьте к своему медиаплееру
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
//Метод вызывается, когда трек заканчивается
public void onCompletion(MediaPlayer mp) {
//TODO : переключение состояния кнопки
}
});
подробнее почитайте в документации
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день, возникла проблема при клонировании проекта с GitHub, все сделал по инструкциямМожет ли кто объяснить в что я сделал не так? Версия...
Да,вопрос от новичкаНе нужно издеваться