熟悉Android---imageView加载网络图片

补充

使用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"/

运行即可;

猜你喜欢

转载自blog.csdn.net/weixin_40932028/article/details/106228470
今日推荐