xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textview1"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="hello"/>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/progressbar1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button1"
android:text="button1"/>
</LinearLayout>
java
import android.app.ProgressDialog;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView mTextView01;
private Button mButton1;
private ProgressBar mProgressbar;
public int intCount=0;
//自定义Handler信息代码,用以做识别事件处理
protected static final int GUI_STOP=0x108;
protected static final int GUI_THREADING=0x109;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton1=(Button)findViewById(R.id.button1);
mTextView01=(TextView)findViewById(R.id.textview1);
//设置ProgressBar widget对象
mProgressbar=(ProgressBar)findViewById(R.id.progressbar1);
//调用setIndeterminate方法赋值indetermine模式为false
mProgressbar.setIndeterminate(false);
//点击按钮时,开始运行线程
mButton1.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v)
{
//点击按钮让进度条显示
mProgressbar.setVisibility(View.VISIBLE);
//指定进度条最多为100
mProgressbar.setMax(100);
//进度条的初始为0
mProgressbar.setProgress(0);
new Thread(new Runnable() {
@Override
public void run() {
//默认0到9共10次
for(int i=0;i<10;i++)
{
try
{
//用以识别加载进度
intCount=(i+1)*20;
//每运行循环一次,睡一秒
Thread.sleep(1000);
//当Thread运行5秒后显示运行结束
if(i==4)
{
//以Message为对象,传递参数给Handler
Message m=new Message();
//以what属性指定User自定义
m.what=MainActivity.GUI_STOP;
MainActivity.this.myMessageHandler.sendMessage(m);
break;
}
else
{
Message m=new Message();
m.what=MainActivity.GUI_THREADING;
MainActivity.this.myMessageHandler.sendMessage(m);
}
}catch (Exception e)
{
e.printStackTrace();
}
}
}
}).start();
}
});
}
Handler myMessageHandler=new Handler()
{
public void handlerMessage(Message msg)
{
switch (msg.what)
{
//当取得识别码为 离开线程所取得的信息
case MainActivity.GUI_STOP:
//运行结束
mProgressbar.setVisibility(View.GONE);
Thread.currentThread().interrupt();
break;
//当取得识别为 在运行线程中所取得的信息
case MainActivity.GUI_THREADING:
if(!Thread.currentThread().isInterrupted())
{
mProgressbar.setProgress(intCount);
//将显示进度显示于textview中
mTextView01.setText("("+Integer.toString(intCount)+"%\n"+"Progress:"+Integer.toString(mProgressbar.getProgress())+"\n");
}
break;
}
super.handleMessage(msg);
}
};
}
1.setIndeterminate(false); 进度条的方法,使进度条不为模糊模式
2.setVisibility(View.VISIBLE); 设置进度条是否可见,这里设置为可见
3. Message m 信息类
4. m.what=MainActivity.GUI_THREADING;这里可以看做信息的内容被定义
5. MainActivity.this.myMessageHandler.sendMessage(m);将信息传递到信息处理方法
6. Handler 常用来接收信息,常用于和Message配套使用
7. super.handleMessage(msg)对不需要或者不关心的消息抛给父类,避免丢失消息