0

我到处寻找以解决我的问题,但我似乎无法解决问题。

如何使搜索栏随着歌曲播放自动滑动?

这就是我到目前为止所拥有的。

ArrayList<String> arrlist = new ArrayList<String>(20);
private Handler seekHandler = new Handler();
ImageButton next, playPause, previous;
SeekBar seekBar;

  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.layout);
      getSupportActionBar().hide();

      getInit();
  }

  public void getInit() {

      songCurrentDurationLabel = (TextView) findViewById(R.id.startTime);
      songTotalDurationLabel = (TextView) findViewById(R.id.endTime);

      mediaPlayer = new MediaPlayer();
      mediaPlayer = MediaPlayer.create(this, R.raw.firstsong);

      seekBar = (SeekBar) findViewById(R.id.seekBar1);
      seekBar.setMax(mediaPlayer.getDuration());
      seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

          @Override
          public void onStopTrackingTouch(SeekBar seekBar) {
              // remove message Handler from updating progress bar
              seekHandler.removeCallbacks(mUpdateTimeTask);
              int totalDuration = mediaPlayer.getDuration();
              int currentPosition = progressToTimer(seekBar.getProgress(), totalDuration);

              // forward or backward to certain seconds
              mediaPlayer.seekTo(currentPosition);

              // update timer progress again
              updateProgressBar();
          }

          @Override
          public void onStartTrackingTouch(SeekBar seekBar) {
              // remove message Handler from updating progress bar
              seekHandler.removeCallbacks(mUpdateTimeTask);
          }

          @Override
          public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
              if (mediaPlayer != null && fromUser) {
                  mediaPlayer.seekTo(progress);
//                     mediaPlayer.seekTo(progress * 1000);
              }
          }
      });

      spinner = ((Spinner) findViewById(R.id.spinner1));
      spinner.setAdapter(songAdapter);

      previous = ((ImageButton) findViewById(R.id.previous));
      playPause = ((ImageButton) findViewById(R.id.play));
      next = ((ImageButton) findViewById(R.id.next));

      spinner.setOnItemSelectedListener(this);
      previous.setOnClickListener(this);
      playPause.setOnClickListener(this);
      next.setOnClickListener(this);

      totalDuration = mediaPlayer.getDuration();
      currentDuration = mediaPlayer.getCurrentPosition() / 1000;

      // Displaying Total Duration time
      songTotalDurationLabel.setText("" + milliSecondsToTimer(totalDuration));

      // Displaying time completed playing
      songCurrentDurationLabel.setText("" + milliSecondsToTimer(currentDuration));
  }

  public void updateProgressBar() {
      seekHandler.postDelayed(mUpdateTimeTask, 100);
  }

  private Runnable mUpdateTimeTask = new Runnable() {
      @Override
      public void run() {
          long totalDuration = mediaPlayer.getDuration();
          long currentDuration = mediaPlayer.getCurrentPosition() / 1000;
          int progress = (int) getProgressPercentage(currentDuration, totalDuration);

          // Updating progress bar
          seekBar.setProgress(progress);

          // Running this thread after 100 milliseconds
          seekHandler.postDelayed(this, 100);
      }
  };

  public int progressToTimer(int progress, int totalDuration) {
      int currentDuration = 0;
      totalDuration = (int) (totalDuration / 1000);
      currentDuration = (int) ((((double) progress) / 100) * totalDuration);

      // return current duration in milliseconds
      return currentDuration * 1000;
  }

  public int getProgressPercentage(long currentDuration1, long totalDuration1) {
      Double percentage = (double) 0;

      long currentSeconds = (int) (currentDuration1 / 1000);
      long totalSeconds = (int) (totalDuration1 / 1000);

      // calculating percentage
      percentage = (((double) currentSeconds) / totalSeconds) * 100;

      // return percentage
      return percentage.intValue();
  }

  public String milliSecondsToTimer(long milliseconds) {
      String finalTimerString = "";
      String secondsString = "";

      // Convert total duration into time
      int hours = (int) (milliseconds / (1000 * 60 * 60));
      int minutes = (int) (milliseconds % (1000 * 60 * 60)) / (1000 * 60);
      int seconds = (int) ((milliseconds % (1000 * 60 * 60)) % (1000 * 60) / 1000);
      // Add hours if there
      if (hours > 0) {
          finalTimerString = hours + ":";
      }

      // Prepending 0 to seconds if it is one digit
      if (seconds < 10) {
          secondsString = "0" + seconds;
      } else {
          secondsString = "" + seconds;
      }

      finalTimerString = finalTimerString + minutes + ":" + secondsString;

      // return timer string
      return finalTimerString;
  }

我没有包括歌曲列表和所有其他的东西,因为我不明白为什么要把它放在这里。但无论如何,当我在这里做我所拥有的时,我没有得到任何错误或任何东西,搜索栏不会自动移动,当我尝试手动将其移动到某个位置时,它会立即回到 0。

4

1 回答 1

0

U 设置seekBar.setMax(mediaPlayer.getDuration());持续时间 ~ 7 位数的值。之后你计算百分比〜2位数。你需要设置seekBar.setMax(100)或不计算百分比并按原样设置进度。

于 2014-04-10T14:27:23.830 回答