Android使用Universal-ImageLoader在ListView中加载网络图片简单示例

大家好,最近在问答专区上看到了很多朋友问如何加载网络图片或者加载网络图片失败的问题,因为之前没有整理过类似的文章,但是也不能把别人的文章地址复制过来吧,这也是对自己的不尊重是吧,hiahia~,所以决定立即写一篇博客,介绍一下Universal-ImageLoader这个强大的工具的用法,虽然不是很详细,但是我自己写了个小demo,代码比较详细,大家也看的明白,如果有不懂的可以继续发私信我,我会一一为大家解答问题,我们的目的是共同进步嘛,好啦,废话不多说,下面我来给大家写个例子。

  • 1)首先,我们导入Universal-Image-Loader.jar包,然后右键BuildPath,将jar包添加到工程目录下,然后我们的ImageLoader还需要写一个类AppContext继承自Application,里面的代码主要是用来配置ImageLoader的初始化的,涉及到一些配置参数之类的,大家可以看看代码,具体如下所示:

    package com.example.listviewimageloaderdemo;
    
    import android.app.Application;
    import android.content.Context;
    
    import com.nostra13.universalimageloader.core.DisplayImageOptions;
    import com.nostra13.universalimageloader.core.ImageLoader;
    import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
    import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
    import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
    
    public class AppContext extends Application {
    
        private static Context context;
    
        @Override
        public void onCreate() {
            super.onCreate();
            context = this;
            initImageLoader();
        }
    
        public static Context getAppContext() {
            return context;
        }
    
    
        private final static void initImageLoader() {
            ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).defaultDisplayImageOptions(getDefaultDisplayOption())
                    .threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory()
                    .imageDownloader(new BaseImageDownloader(context))
                    .tasksProcessingOrder(QueueProcessingType.LIFO).build();
            ImageLoader.getInstance().init(config);
        }
    
        private final static DisplayImageOptions getDefaultDisplayOption() {
            DisplayImageOptions options = new DisplayImageOptions.Builder()
                    .showImageForEmptyUri(R.drawable.empty_photo) // 设置图片Uri为空或是错误的时候显示的图片
                    .showImageOnFail(R.drawable.empty_photo) // 设置图片加载或解码过程中发生错误显示的图片
                    .cacheInMemory(true) // 设置下载的图片是否缓存在内存中
                    .cacheOnDisk(true) // 设置下载的图片是否缓存在SD卡中
                    .showImageOnLoading(R.drawable.empty_photo).build(); // 创建配置过得DisplayImageOption对象
            return options;
        }
    }
    
  • 2)然后我们再为listview的布局写一个item.xml文件,里面只放置一个ImageView对象,简单用来显示加载网络的图片,具体代码如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#ffffff"
        android:orientation="vertical" >
    
        <ImageView
            android:id="@+id/imageview"
            android:layout_margin="10dp"
            android:layout_width="match_parent"
            android:layout_height="160dp"
            android:scaleType="centerCrop"
            android:src="@drawable/empty_photo" />
    
        <View 
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#50000000"/>
    
    </LinearLayout>
    
  • 3)现在我们在主页布局activity_main.xml文件中添加一个ListView对象,具体代码如下所示:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </ListView>
    
    </RelativeLayout>
    
  • 4)第四步,我们在MainActivity中编写代码,代码包括几部分内容,第一是我们的网络图片网址数据,我在网上找了几张马苏妹子的横版写真,样式比较符合我们横向展示的需求,所以这里就以她为例,其次我们需要编写一个BaseAdapter,这里我并没有写一个MyAdapter类继承BaseAdapter,只是用了匿名内部类的方法直接实现了,因为我们的需求比较的简单嘛,大家见谅,最后就是为listview对象赋值啦,好啦,具体代码如下所示,如果有不懂的可以在底下留言,看到了我就会回复大家:

    package com.example.listviewimageloaderdemo;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.Window;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    
    import com.nostra13.universalimageloader.core.ImageLoader;
    
    public class MainActivity extends Activity {
    
        private List<String> imgUrls = new ArrayList<String>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_main);
    
            imgUrls.add("http://t12.baidu.com/it/u=2627729012,2757221180&fm=32&s=6FF03AD45F22531708D914660300A074&w=800&h=533&img.JPEG");
            imgUrls.add("http://t10.baidu.com/it/u=2822595750,3054012252&fm=32&s=6ED02AD44B2056171A9D566403007074&w=800&h=533&img.JPEG");
            imgUrls.add("http://t10.baidu.com/it/u=2696906466,2879118173&fm=32&s=6ED03AD64F2057175A59566E0300E074&w=800&h=533&img.JPEG");
            imgUrls.add("http://t11.baidu.com/it/u=2883034624,3005607117&fm=32&s=29802EDD4E01775D6069975F0300D075&w=800&h=533&img.JPEG");
            imgUrls.add("http://t10.baidu.com/it/u=2830754568,2918379817&fm=32&s=6BF01BD45F404651485C574E0300F074&w=800&h=533&img.JPEG");
            imgUrls.add("http://t10.baidu.com/it/u=2345084643,2692649554&fm=32&s=88B86A964F22521502D1DE700300F07F&w=800&h=533&img.JPEG");
    
            ListView listView = (ListView) findViewById(R.id.listview);
            listView.setAdapter(new BaseAdapter() {
    
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    ViewHolder holder = null;
                    if (convertView == null) {
                        holder = new ViewHolder();
                        convertView = getLayoutInflater().inflate(R.layout.item,
                                null);
                        holder.imageView = (ImageView) convertView
                                .findViewById(R.id.imageview);
                        convertView.setTag(holder);
                    } else {
                        holder = (ViewHolder) convertView.getTag();
                    }
    
                    ImageLoader.getInstance().displayImage(imgUrls.get(position),
                            holder.imageView);
                    return convertView;
                }
    
                @Override
                public long getItemId(int position) {
                    return position;
                }
    
                @Override
                public Object getItem(int position) {
                    return imgUrls.get(position);
                }
    
                @Override
                public int getCount() {
                    return imgUrls.size();
                }
            });
        }
    
        class ViewHolder {
            ImageView imageView;
        }
    
    }
    
  • 5)最后千万不要忘了一点,就是在清单文件Mainfest.xml文件中添加联网权限,要不然是无法加载图片的哦

    <uses-permission android:name="android.permission.INTERNET"/>
    

    还有一点就是此时要将Application设置成我们自己实现的AppContext对象,只用在清单文件中添加一个name属性,选择我们的AppContext即可

    <application
        android:name="com.example.listviewimageloaderdemo.AppContext"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
    

好了,到这里我们可以部署到模拟器或者手机上观察效果了,可以发现此时用ImageLoader加载的网络图片完美的展示在了listview的item对象上,是不是很神奇呀~好啦,这里就是简单介绍了如何使用ImageLoader加载网络图片,以及如何赋值到ListView对象上,代码比较简单,但是希望对一些初学者有一定的帮助那就可以啦~再见~

  • 更多资讯可以关注我的博客或者我的新浪微博:我是紫色紫色,不定期分享更多精彩内容,谢谢!

你的支持就是我的动力,欢迎大家热烈交流~欢迎大家订阅公众号,我会不定期更新资源,供大家一起学习。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖子爱你520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值