动态加载网络图片
和 WebView 一样,加载网络图片也需要网络访问权限:
载入图片的原理:根据图片地址获取图片,并将图片由文件流转换为位图对象。
载入图片的过程必须进行异步处理,否则就很容易出现程序无响应(Application Not Responding)的情况。
创建一个 LoadImagesTask 类,继承自 AsyncTask:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;public class LoadImagesTask extends AsyncTask{privateImageView imageView;publicLoadImagesTask(ImageView imageView) {this.imageView =imageView;
}
@Overrideprotected Bitmap doInBackground(String... params) {
URL imageUrl= null;
Bitmap bitmap= null;
InputStream inputStream= null;try{
imageUrl= new URL(params[0]);
HttpURLConnection conn=(HttpURLConnection) imageUrl.openConnection();
conn.setDoInput(true);
conn.connect();
inputStream=conn.getInputStream();
bitmap=BitmapFactory.decodeStream(inputStream);
inputStream.close();
}catch(MalformedURLException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}returnbitmap;
}
@Overrideprotected voidonPostExecute(Bitmap bitmap) {
imageView.setImageBitmap(bitmap);
}
}
异步处理就是在主线程和子线程进行通信,子线程处理耗时任务,并将结果返回到主线程。AsyncTask 将这个过程进行了包装,这里我就不多解释了。
最后在 MainActivity 中进行测试,代码如下:
public classMainActivity extends AppCompatActivity {privateImageView imageView;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_image);
String http= "http://img4.duitang.com/uploads/item/" +
"201403/27/20140327194516_SaKBX.png";
ImageView imageView=(ImageView) findViewById(R.id.image_view);//启动异步任务,加载网络图片
newLoadImagesTask(imageView).execute(http);
}
}
原文:https://www.cnblogs.com/huckleberry/p/12714463.html