补充
使用Glide框架只要一行代码就可以搞定图片的显示,功能更强大。都2020年了,有好用的框架那必须要用啊。Glide框架使用请移步郭霖大神的博客:
https://blog.csdn.net/guolin_blog/article/details/53759439
前言
4.0以后的版本,UI线程不允许有耗时操作,所以请求网络图片需要运行在子线程;
加载图片的代码参考:
https://zhidao.baidu.com/question/537762079.html
效果图
图片链接:
http://www.souchiwang.com/images/user_3.jpg
布局文件
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img1"/>
</LinearLayout>
MainActivity
第一步:
在UI线程定义 网络图片链接;
第二步:
新建子线程请求图片,请求结果为bitmap;
第三步:
在UI线程将图片加载出来;
public class MainActivity extends Activity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.img1);
URL url = null;
try {
url = new URL("http://www.souchiwang.com/images/user_3.jpg");
requestImg(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
private void requestImg(final URL imgUrl)
{
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(imgUrl.openStream());
showImg(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private void showImg(final Bitmap bitmap){
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(bitmap);
}
});
}
}
联想
第一步和第二应该可以合并在子线程中;
将bitmap声明为全局变量,第三步应该可以精简:
try {
url = new URL("http://www.souchiwang.com/images/user_3.jpg");
requestImg(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
imageView.setImageBitmap(bitmap);
这里我没有测试过,只是一些想法;
权限
在 Mainfest.xml文件中加入网络权限申请;
<uses-permission android:name="android.permission.INTERNET"/
运行即可;