带有Seekbar的音乐播放器(Android Studio)

时间:2018-12-28 16:54:16

标签: java android

  • 我当时在一个带有搜索栏的非常简单的音乐播放器中工作。但是我在播放音乐时遇到了问题,它无法每秒正常工作-倒退一会儿,然后像车子一样再次出现。

    我知道为什么,但是我解决不了。

    当进度条向前移动时,音乐将重新校准,反之亦然;当音乐向前移动时,进度条将重新校准。 可能是因为它每次回退。 但是我尝试了几件事,仍然有同样的问题。

  • 另一个问题是,当音乐暂停时,进度条会朝相反的方向移动,直到达到零为止。它不会停留在休息前的地方。

完整代码:

public class MainActivity extends AppCompatActivity {

private MediaPlayer mediaPlayer;
private SeekBar seekBar;
private boolean bool = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.seekBar = (SeekBar) findViewById(R.id.sound_bar);
    this.mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.music);

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            seekBar.setProgress(mediaPlayer.getCurrentPosition() * seekBar.getMax() / mediaPlayer.getDuration());
        }
    }, 500, 500);

    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            mediaPlayer.seekTo(seekBar.getProgress() * mediaPlayer.getDuration() / seekBar.getMax());
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });
}

public void playSound(View view) {

    Button button = (Button) view;

    if(bool) {
        mediaPlayer.pause();
        bool = false;
        button.setText("Jouer le son");
    } else {
        mediaPlayer.start();
        bool = true;
        button.setText("Mettre en pause");
    }
}

@Override
protected void onPause() {
    super.onPause();
    mediaPlayer.pause();
}

@Override
protected void onStart() {
    super.onStart();
    if(bool) {
        mediaPlayer.start();
    }
}

}

1 个答案:

答案 0 :(得分:0)

也许使用另一个线程来控制搜索栏会有所帮助。

看看this