web-dev-qa-db-fra.com

Comment utiliser Android ProgressBar en mode déterminé?

J'écris un lecteur multimédia et j'aimerais avoir une barre de progression montrant la progression de la chanson. J'ai trouvé la classe ProgressBar, mais tout ce que je peux voir à l'écran est une icône de rotation circulaire. ce que je cherche c'est un vrai bar.

Comment puis-je changer le style de ProgressBar pour qu'il soit une barre (pas un cercle) et comment l'utiliser avec MediaPlayer?

merci

27
mtmurdock

utilisez le style ?android:attr/progressBarStyleHorizontal

par exemple:

  <ProgressBar Android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"

et ceci est un exemple avec MediaPlayer:

package com.playerpgbar;

import Android.app.Activity;
import Android.media.MediaPlayer;
import Android.os.Bundle;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.ProgressBar;
import Android.widget.TextView;

public class Player extends Activity implements Runnable, OnClickListener {

    private TextView status;
    private ProgressBar progressBar;
    private Button startMedia;
    private Button stop;
    private MediaPlayer mp;      

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        status = (TextView) findViewById(R.id.status);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        startMedia = (Button) findViewById(R.id.startMedia);
        stop = (Button) findViewById(R.id.stop);

        startMedia.setOnClickListener(this);
        stop.setOnClickListener(this);                
    }        

    @Override
    public void onClick(View v) {
        if (v.equals(startMedia)) {
            if (mp != null && mp.isPlaying()) return;
            mp = MediaPlayer.create(Player.this, R.raw.exodus_piranha);
            mp.start();               
            status.setText(R.string.PlayingMedia);         
            progressBar.setVisibility(ProgressBar.VISIBLE);
            progressBar.setProgress(0);
            progressBar.setMax(mp.getDuration());
            new Thread(this).start();
        }

        if (v.equals(stop) && mp!=null) {
            mp.stop();
            mp = null;            
            status.setText(R.string.Stopped);
            progressBar.setVisibility(ProgressBar.GONE);
        }
    }

    @Override
    public void run() {
        int currentPosition= 0;
        int total = mp.getDuration();
        while (mp!=null && currentPosition<total) {
            try {
                Thread.sleep(1000);
                currentPosition= mp.getCurrentPosition();
            } catch (InterruptedException e) {
                return;
            } catch (Exception e) {
                return;
            }            
            progressBar.setProgress(CurrentPosition);
        }
    }
}
63
Jorgesys

Par programme:

progressBar = new ProgressBar(activity, null, Android.R.attr.progressBarStyleHorizontal);
progressBar.setIndeterminate(false);
4
nmr