sử dụng phong cách ?android:attr/progressBarStyleHorizontal
ví dụ:
<ProgressBar android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
và đây là một ví dụ với 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);
}
}
}
Cảm ơn điều này hoạt động tốt, nó chỉ thiếu một dòng: bạn cần đặt vị trí tối đa (setMax (tổng)) trước khi bạn bắt đầu vòng lặp while hoặc thanh sẽ chuyển thẳng đến 100%. thankyou! – mtmurdock
hello tôi không thể nhìn thấy thanh lúc 100% lúc bắt đầu, tôi đặt progressBar.setMax (mp.getDuration()); và sau đó Thực hiện chuỗi có chứa vòng lặp while để cập nhật tiến trình, chủ đề mới (this) .start(); =) – Jorgesys
Không, đây không phải là mô hình luồng hợp lệ cho Android. KHÔNG tạo chủ đề của riêng bạn và sau đó sửa đổi giao diện người dùng từ bên trong chuỗi đó. Bạn PHẢI tuân thủ các quy tắc của Android hoặc bạn sẽ tạo một lỗi khó tìm thấy ... Thay vào đó, hãy thực hiện điều này ... http://developer.android.com/resources/articles/painless-threading.html –