此文,仅做为个人学习Android,记录成长以及方便复习!
创建布局文件,一个ImageView用来加载网络图片,一个ProgressBar用来加载图片未完成前显示Loading....
其中ProgressBar的android:visibility="gone"是隐藏组件
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"/>
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"/>
</RelativeLayout>
因为要去从网络获取图片,所以在清单文件
AndroidManifest.xml添加网络访问权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
然后就是Activity文件了
定义一个内部类继承了AsyncTask,实现方法获取图片,并显示和隐藏ProgressBar
MainActivity.java
package com.example.qqazl001.asynctaskdemo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.URL;
import java.io.InputStream;
import java.net.URLConnection;
public class MainActivity extends AppCompatActivity {
private ImageView image;//声明ImageView
private ProgressBar progressBar;//声明ProgressBar
//想要下载的图片地址
private String URL="https://www.baidu.com/img/bd_logo1.png?where=super";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化ImageView ProgressBar
image = (ImageView)findViewById(R.id.image);
progressBar = (ProgressBar)findViewById(R.id.progressBar);
new MyAsyncTask().execute(URL);
}
//创建内部类,继承AsyncTask<第一个参数URL类型,第二参数进度值类型,第三个返回值类型>
public class MyAsyncTask extends AsyncTask<String,MediaStore.Video,Bitmap>{
//doInBackround开始之前,执行该方法,一般进行初始化
@Override
protected void onPreExecute() {
super.onPreExecute();
//显示隐藏了的ProgressBar
progressBar.setVisibility(View.VISIBLE);
}
//必须实现的方法
@Override
protected Bitmap doInBackground(String... strings) {
//传进来的是一个可变长数组,也就是说,我们可以传进不止一个参数(通过execute()传进来),
// 这些参数依次存在于这个数组中。现在只有一个参数,所以只要写个params[0]取出对应的URL即可。
String url= strings[0];
Bitmap bitmap = null;//存放取得的图像
URLConnection connection;//定义网络连接对象
InputStream inputStream;//数据输入流
try {
connection = new URL(url).openConnection();//获取网络连接对象
inputStream = connection.getInputStream();//获取输入流
//输入流包装成缓冲流提高速度
BufferedInputStream bis = new BufferedInputStream(inputStream);
//制造点延迟,为了看测试效果
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//获取到Bitmap
bitmap = BitmapFactory.decodeStream(bis);
//关闭输入流
inputStream.close();
//关闭输入缓冲流
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
//doInBackground运行之后获得返回值,然后运行此方法,
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
progressBar.setVisibility(View.GONE);
image.setImageBitmap(bitmap);
}
}
}