2010年1月30日星期六

動態的進度條(ProgressBar)

在進度條(ProgressBar)一篇文章中, 顯示了靜態的進度條. 現在來實現一個動態的進度條.

動態的進度條(ProgressBar)

我們實施了一個可運行的線程(Runable Thread), 來產生信息(Message); (我們不能在此線程直接更新進度條, 因為祗有創建該UI的線程能夠變更該UI)

另一方面我們實施了一個Handle來處理信息, 以更新進度條.

修改main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
/>
</LinearLayout>


主程序
package com.AndroidProgressBar;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;

public class AndroidProgressBar extends Activity {

ProgressBar myProgressBar;
int myProgress = 0;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

myProgressBar = (ProgressBar)findViewById(R.id.progressbar);
myProgressBar.setProgress(myProgress);

new Thread(new Runnable(){

@Override
public void run() {
// TODO Auto-generated method stub
while(myProgress<100){
try{
myHandle.sendMessage(myHandle.obtainMessage());
Thread.sleep(1000);
}catch(Throwable t){
}
}
}
}).start();

}

Handler myHandle = new Handler(){

@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
myProgress++;
myProgressBar.setProgress(myProgress);
}
};
}




沒有留言:

發佈留言