2010-06-03 20 views
25

Bir medya oynatıcı yazıyorum ve şarkının ilerlemesini gösteren bir ilerleme çubuğu istiyorum. ProgressBar sınıfını buldum, ancak ekrana ulaşabileceğim tek şey yuvarlak bir eğirme ikonudur. Ne arıyorum, gerçek bir çubuktur.Android ProgressBar'ı belirleme modunda nasıl kullanırım?

ProgressBar'ın stilini bir çubuk (daire değil) olarak nasıl değiştiririm ve MediaPlayer ile nasıl kullanırdım?

sayesinde

cevap

56

kullanım tarzı örneğin ?android:attr/progressBarStyleHorizontal

:

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

ve bu MediaPlayer ile bir örnektir: Programlı

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); 
     } 
    } 
} 
+0

Bu işe yarıyor, sadece bir satır eksik: while döngüsünü başlatmadan önce max konumunu (setMax (toplam)) ayarlamanız veya çubuğun% 100'e düz gitmesi gerekir. – mtmurdock

+0

Merhaba, başlangıçta% 100 bar göremiyorum, progressBar.setMax (mp.getDuration()); ve sonra progressBar, yeni Thread (this) .start(); =) – Jorgesys

+27

Hayır, bu Android için geçerli bir iş parçacığı modeli DEĞİLDİR. Kendi iş parçanızı oluşturmayın ve ardından UI'yi bu iş parçacığı içinden değiştirmeyin. Android kurallarına uymalısınız, ya da bulmak zor bir hata yaratırsınız ... Bunun yerine ... http://developer.android.com/resources/articles/painless-threading.html –

0

:

progressBar = new ProgressBar(activity, null, android.R.attr.progressBarStyleHorizontal); 
progressBar.setIndeterminate(false); 
İlgili konular