二话不说先看看运行效果。先看一下main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="220dp"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始" />
</LinearLayout>
在来看一下java代码
package leilei.handler.bar;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class BarHandlerActivity extends Activity {
/** Called when the activity is first created. */
private Button startButton;
private ProgressBar progressBar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
progressBar = (ProgressBar)findViewById(R.id.progressBar1);
startButton = (Button)findViewById(R.id.button1);
startButton.setOnClickListener(new ButtonListener());
}
class ButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
handler.post(updaterunnable);
}
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
progressBar.setProgress(msg.arg1);
handler.post(updaterunnable);
}
};
Runnable updaterunnable = new Runnable() {
int i = 0;
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("start bar");
i = i + 10;
Message msg = handler.obtainMessage();
msg.arg1 = i;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendMessage(msg);
if(i == 100){
handler.removeCallbacks(updaterunnable);
}
}
};
}
关于进度条的使用的更新方法:
1.首先创建Handler对象
Handler handler = new Handler
2.创建Handler后调用handler.post(updaterunnable)方法把添加到消息队列中
3.更新进度条当然要用到线程,接下来该创建线程了。
Runnable updaterunnable = new Runnable()
线程里run方法里就是我们要更新的具体实现了。
run里的message方法
官方API解释如下:message是定义一个包含任意对象任意数据的对象,这个对象可以发送到Handler中,上面代码中
handler.sendMessage(msg);把msg 作为参数发送出去,那么发送出的是数据被谁接收呢?
接着看,在Handler中progressBar.setProgress(msg.arg1);进度条接收了这个参数,i每次自加10,所以进度条每次自动前进10个单位,
要想实现进度条循环前进,所以还要再一次在Handler方法中调用handler.post(updaterunnable);把线程假如到消息队列中,
看程序整理思路,点击Button会触发监听器,监听器会把发线程作为一个对象发送到Handler对象中,(队列是先进先出,犹如汽车过隧道,一定是顺序的进出。)
接下来程序跳转到Thread那,在线程里的run方法里就不用多说了,里面会声称一个msg消息传递给进度条,进度条progressBar会在Handler的匿名内部类里被接受,随后再次调用handler.post(updaterunnable);方法把线程再一次放Handler进队列中,因此能实现循环更新。说的不够相信,希望对大家都有帮助。
有什么不明白的可以关注我的新浪微博哦 欢迎大家一起讨论 http://weibo.com/419768151