⭐.使用进度条模拟图片加载过程,加载完成则显示图片。
效果如下:
所需控件(修改主布局文件):
依次放置
显示进度值的文本框,
一个水平进度条组件,
一个按钮,
一个图片显示控件。
将按钮单击方法改为myclick;将图片显示和水平进度条设为隐藏,android:visibility = “gone”。
修改主Activity文件:
除了定义XML布局文件中的组件外,还定义了一个处理消息的Handler类对象。
在定义Handler类对象中,写了handleMessage0方法,通过消息Message带来的值更新进度以及提示信息。
更新完成,提示下载完成并显示图片imageView.setVisibility(View.VISIBLE);
package com.example.dn.zxyapplication_03;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;
import android.os.Message;
import android.os.Handler;
public class MainActivity extends AppCompatActivity{
private ImageView imageView;
private ProgressBar progressBar;
private TextView pbtext;
private Handler myHandler;
private int pvalue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pbtext=(TextView)findViewById(R.id.pbText);
Button button=(Button) findViewById(R.id.button);
progressBar=(ProgressBar) findViewById(R.id.pb);
imageView=(ImageView) findViewById(R.id.image);
//在自定义Handler类中,重写handleMessage()方法
//通过Message的值更新进度和提示信息
myHandler=new Handler(){
@Override
public void handleMessage(Message msg){
progressBar.setProgress(msg.arg1); //将进度条进度更新到msg.arg1的值
pbtext.setText("正在下载中...(" +msg.arg1+ "%)" ); //更新提示信息
if(msg.what==0x222){
//msg==100,弹出提示信息“下载完成”
Toast.makeText(MainActivity.this,"下载完成", Toast.LENGTH_SHORT).show();
//msg==100,将图片设置为显示
imageView.setVisibility(View.VISIBLE);
}
}
};
}
public void myClick(View view){
imageView.setVisibility(View.GONE); //set初识状态和初始值
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(0);
new Thread(new Runnable() {
@Override
public void run() {
pvalue=0;
while(true){
pvalue+=(int)(Math.random()*10);
try{
Thread.sleep(100);
}catch (Exception e){
e.printStackTrace();
}
Message mes=new Message();
if(pvalue<100){
mes.arg1=pvalue;
mes.what=0x111;
myHandler.sendMessage(mes);
}else{
mes.arg1=100;
mes.what=0x222;
myHandler.sendMessage(mes);
break;
}
}
}
}).start();
}
}