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

   好久没写教程了,上上个星期辞职了,怕没手感了,特再写一个入门级教程练练手同时供大家学习。

Android显示网络图片一般都是将网络连接得到的输入流转为化位图对象(Bitmap),再将这个对象交给ImageView对象或其他控件显示。相信大家对ImageView显示网络图片的方法已经很了解了,百度教程也一大把(大多没有谈及异步线程有关的问题),主要分为基础的Java网络请求方式和类似Universal-Image-Loader第三方包(库)方式,笔者认为后者大概是较好的封装前者方式的包(库),个人比较喜欢越基础的越好,太依赖第三方会造成懒惰和依赖心理,技术也很难提升。话不多说,上教程:

1.本教程以RelativeLayout为例,activity_main.xml里--->

这个很简单,没什么好解释的了。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rl_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</RelativeLayout>

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" />`网络权限哦。
    好了就说到这里了,很基础的教程,不喜勿喷。对了,大家有什么好工作(上海公司)也可以推荐给我,待业中。 [项目源码下载](http://download.csdn.net/detail/ausboyue/9590723)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值