消息机制
main.xml文件代码。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyle"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ProgressBar
android:id="@+id/progressBar2"
style="?android:attr/progressBarStyleHorizontal"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ProgressBar
android:id="@+id/progressBar3"
style="?android:attr/progressBarStyleLarge"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ProgressBar
android:id="@+id/progressBar4"
style="?android:attr/progressBarStyleSmall"
android:layout_width="match_parent"
android:visibility="gone"//让进度条在一开始的时候处于隐藏状态
android:layout_height="wrap_content" />
<ProgressBar
android:id="@+id/progressBar5"
style="?android:attr/progressBarStyleSmallInverse"
android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="wrap_content" />
<Button
android:id="@+id/but"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="显示进度条"
/>
</LinearLayout>
下面先对进度条属性进行以下说明:
1、style="?android:attr/progressBarStyleSmall"代表小号圆形进度条。
2、style="?android:attr/progressBarStyleLarge"代表超大号圆形进度条。
3、style="?android:attr/progressBarStyleHorizontal"代表长形进度条。
MainActivity.java文件内容。
package com.example.inforcontact3;
import android.app.Activity;
import android.content.res.Resources.Theme;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
//定义事件处理标示
public static final int CONTINUE = 1;
public static final int STOP = 2;
//定义进度条组件
private ProgressBar bar1, bar2, bar3, bar4, bar5;
private Button but;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bar1 = (ProgressBar)findViewById(R.id.progressBar1);
bar2 = (ProgressBar)findViewById(R.id.progressBar2);
bar3 = (ProgressBar)findViewById(R.id.progressBar3);
bar4 = (ProgressBar)findViewById(R.id.progressBar4);
bar5 = (ProgressBar)findViewById(R.id.progressBar5);
but = (Button)findViewById(R.id.but);
but.setOnClickListener(new OnClickListenerImpl());
}
private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
//显示进度条
bar1.setVisibility(View.VISIBLE);
bar2.setVisibility(View.VISIBLE);
bar3.setVisibility(View.VISIBLE);
bar4.setVisibility(View.VISIBLE);
bar5.setVisibility(View.VISIBLE);
//设置进度条的长度
bar1.setMax(120);
bar2.setMax(120);
//设置进度条开始的位置
bar1.setProgress(0);
bar2.setProgress(0);
//创建一个子线程
new Thread(new Runnable() {
@Override
public void run() {
int count = 0;
for (int i = 0; i < 10; i++) {
//让进度快一点
count = (i + 1) * 20;
try {
//设置进度条增加的时间间隔
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 6) {
//i == 6时隐藏进度条
Message msg = new Message();
msg.what = STOP;
//立即发送信息,并且调用handleMessage()方法处理信息
MessageHandler.sendMessage(msg);
} else {
Message msg = new Message();
msg.what = CONTINUE;
msg.arg1 = count;
MessageHandler.sendMessage(msg);
}
}
}
}).start();//开启线程
}
}
private Handler MessageHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case STOP:
bar1.setVisibility(View.GONE);
bar2.setVisibility(View.GONE);
bar3.setVisibility(View.GONE);
bar4.setVisibility(View.GONE);
bar5.setVisibility(View.GONE);
//线程中断
Thread.currentThread().isInterrupted();
break;
case CONTINUE:
//表示当前线程没有中断
if (!Thread.currentThread().isInterrupted()) {
bar1.setProgress(msg.arg1);
bar2.setProgress(msg.arg1);
}
break;
}
}
};
}