我到处寻找以解决我的问题,但我似乎无法解决问题。
如何使搜索栏随着歌曲播放自动滑动?
这就是我到目前为止所拥有的。
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。