首先感谢读这篇文章。 我无法通过AsyncTask内部类从我的自定义ProgressBar更新进度。我正在使用9patch作为背景和进度drawables。它只是不更新。它保持在那里,就像它在maxed值中一样,我正在使用onProgressUpdate()来调用invalidate()并更新UI线程。
以下是现在的样子,它可见并且只是在那里填满:http://imageshack.us/photo/my-images/651/mobicashprogressbar.png/
以下代码:
public void setTimerProgress(int progress){
progressBar.setProgress(progress);
}
public void updateProgress(){
progressBar.invalidate();
}
public void showProgress(){
progressBar.setVisibility(View.VISIBLE);
}
//Classe auxiliar para controle da progress bar
private class TimerProgress extends AsyncTask<Void, Void, Void>{
private int start;
private final int OTP_TIMEOUT = 900000;
@Override
protected void onPreExecute() {
super.onPreExecute();
showProgress();
start = (int) System.currentTimeMillis();
}
@Override
protected Void doInBackground(Void... param) {
int timer = (int) System.currentTimeMillis() - start;
while (timer <= OTP_TIMEOUT){
setTimerProgress(timer);
timer = (int) System.currentTimeMillis() - start;
publishProgress();
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
updateProgress();
}
}
HERE'S XML:
<ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_gravity="center_horizontal"
android:visibility="invisible"
android:id="@+id/progress_bar_timer"
android:max="900000"
android:progress="3000"
android:progressDrawable="@drawable/progress_bar"
android:background="@drawable/progress_background"
android:layout_width="fill_parent"
android:layout_height="25dip"
android:layout_marginRight="73sp"
android:layout_marginLeft="70sp">
</ProgressBar>
在这里我打电话的地方
@Override
public void onClick(View v) {
if (v.getId() == R.id.refresh_otp) {
saveParametersForOTP();
if (edtIniPin.getText().length() == pinLengthInt) {
try {
disableEditText(edtIniPin);
disableEditText(edtValue);
edtOTP.setText(Facade.getInstance().nextOTP(Facade.getInstance().getPin(), Facade.getInstance().getValue()));
//Inicia o timer da progressbar
new TimerProgress().execute();
帮助? :d
更新
对于测试用例,我将OTP_TIMEOUT设置为50000,对代码进行了以下更改并删除了9patch drawables属性,因此它将使用该条的原生drawable。但是,当我使用图像来自定义条形图时,它会出现同样的老问题。它是静态的,都像以前一样填满。
private final int OTP_TIMEOUT = 50000;
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.i("PROGRESS", "Chegou no PreExecute!");
showProgress();
ENABLE_REFRESH = false;
start = (int) System.currentTimeMillis();
}
@Override
protected Void doInBackground(Void... param) {
int timer = (int) System.currentTimeMillis() - start;
while (timer <= OTP_TIMEOUT){
Log.i("PROGRESS", "Chegou no while!");
setTimerProgress((int)timer);
timer = (int) System.currentTimeMillis() - start;
publishProgress();
if (timer >= OTP_TIMEOUT) {
ENABLE_REFRESH = true;
}
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
Log.i("PROGRESS", "Chegou no Progress Update!");
updateProgress();
}
答案 0 :(得分:3)
您需要添加图层列表资源并配置ProgressBar才能使用它。
这是我使用的一个例子。请注意,在progress_bar.xml中,progress_bar_progress和progress_bar_background是九个补丁图像。
<强> progress_bar.xml:强>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background" android:drawable="@drawable/progress_bar_background" />
<item android:id="@android:id/progress" >
<clip android:drawable="@drawable/progress_bar_progress" />
</item>
</layer-list>list>
布局摘要:
<ProgressBar
android:layout_width="fill_parent"
android:layout_height="30dp"
android:max="100"
android:progress="50"
android:progressDrawable="@drawable/progress_bar"
android:indeterminateOnly="false" />