Android ImageView,布局或控件显示网络图片教程

好久没写教程了,上上个星期辞职了,怕没手感了,特再写一个入门级教程练练手同时供大家学习。
Android显示网络图片一般都是将网络连接得到的输入流转为化位图对象(Bitmap),再将这个对象交给ImageView对象或其他控件显示。相信大家对ImageView显示网络图片的方法已经很了解了,百度教程也一大把(大多没有谈及异步线程有关的问题),主要分为基础的Java网络请求方式和类似Universal-Image-Loader第三方包(库)方式,笔者认为后者大概是较好的封装前者方式的包(库),个人比较喜欢越基础的越好,太依赖第三方会造成懒惰和依赖心理,技术也很难提升。话不多说,上教程:
1.本教程以RelativeLayout为例,activity_main.xml里--->
这个很简单,没什么好解释的了。
2.MainActivity里编写相关逻辑—>
定义一个子线程内部类,具体逻辑和注释已经很详细了。

    /**
     * 显示背景图片的内部类子线程
     * @author Cheny
     */
    private class ShowNetPicThread implements Runnable {
        @Override
        public void run() {
            try {
                // 图片地址,这里是百度获得链接,如果不能显示图片(链接失效)请再百度个链接
                String urlStr = "http://b.hiphotos.baidu.com/zhidao/pic/item/6d81800a19d8bc3e9027b816838ba61ea8d3453a.jpg";
                // 将图片地址转化为URL对象
                URL picUrl = new URL(urlStr);
                // 获取连接网络的对象(HTTP协议)
                HttpURLConnection connection = (HttpURLConnection) picUrl.openConnection();
                // 设置连接超时时间,5秒
                connection.setConnectTimeout(5000);
                // 设置连接获取输入流
                connection.setDoInput(true);
                // 设置连接使用缓存
                connection.setUseCaches(true);
                // 连接网络,貌似可写可不写
                connection.connect();
                // 获取连接后的输入流
                InputStream is = connection.getInputStream();
                // 将该输入流转化为Bitmap对象
                final Bitmap bitmap = BitmapFactory.decodeStream(is);
                // 这里是子线程,需要回归主线程更新UI
                runOnUiThread(new Runnable() {
                    public void run() {
                        // 将Bitmap对象转换为Drawable对象
                        Drawable pic = new BitmapDrawable(bitmap);
                        // 设置rl_content背景
                        rl_content.setBackground(pic);
                    }
                });
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

 
OK,是不是觉得和ImageView显示网络图片的方式很像?实际上区别不大,只是在runOnUiThread里的代码有稍微的不一样,bitmap对象不需要转换为Drawable对象,直接imageView.setImageBitmap(bitmap) (这里的imageView是ImageView对象)就可以了。注意了,这里的runOnUiThread是用来通过主线程(本教程是MainActivity为主线程)操作UI,Android是不允许子线程直接操作UI主线程的。当然这里也可以用AsyncTask,Handler处理,具体方法请大家百度Android AsyncTask,Handler用法。

别忘了配置:<uses-permission android:name="android.permission.INTERNET" />网络权限哦。

好了就说到这里了,很基础的教程,不喜勿喷。对了,大家有什么好工作(上海公司)也可以推荐给我,待业中。

项目源码下载

 

© 版权声明
THE END
喜欢就支持以下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容