Android: обновление прогресса SeekrBar - PullRequest
0 голосов
/ 29 августа 2011

У меня есть панель поиска для медиаплеера, и я реализовал, как показано ниже.

    //SeekBar setup     
    progress = (SeekBar)findViewById(R.id.seekBarPlayer);
    progress.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            if (fromUser) {
                mediaPlayer.seekTo(progress);
                Log.v(TAG,progress +"Seeking...");
            }

        }
    });

    //seekbar initiated after mediaplayer initiated
    total = mediaPlayer.getDuration();
    progress.setMax(total);

Но моя проблема в том, что seekBar не работает во время воспроизведения музыки. Он бездействует в одном месте, если я ищу, то музыка ищет, но он не работает и не движется вместе с музыкой. Может кто-нибудь сказать мне, что я скучаю.

Заранее спасибо за ваше время.

Ответы [ 2 ]

4 голосов
/ 29 августа 2011

нить слишком тяжелая для этого.Вот сокращенная версия того, что я использую.

объявляет обработчик в вашей деятельности

private boolean isPaused;
Handler handler = new Handler();

объявляет работоспособный

    Runnable onEverySecond = new Runnable() {   

    @Override
    public void run() {
        if(!isPaused){
            progress.setProgress(player.getCurrentPosition());              

            handler.postDelayed(onEverySecond, EVERY_SECOND);
        }
    }
};

в вашем резюме

@Override
protected void onResume() {
    isPaused = false;
    handler.postDelayed(onEverySecond, EVERY_SECOND);
}

у вас на паузе

@Override
protected void onPause() {  
    isPaused = true;
    handler.removeCallbacks(onEverySecond);
}
1 голос
/ 29 августа 2011

Это потому, что вы обновили индикатор выполнения в том же потоке, в котором работает медиаплеер.обновите свой индикатор выполнения в пользовательском (или другом) потоке. Посмотрите на android: как использовать индикатор выполнения? .Thnx.

...