ImageLoader 基本介绍及使用

前几天做项目的时候因为暂时没有服务器,所以图片全部存在了工程里面,因为屏幕适配的原因,图片全部都是高清大图,一个图片就有1.8MB,下面有浏览区,上面是个大图



 小图是提供了,但是大图太大 放在imageView中 一张还好,点击第二张小图,一点就OOM了,开始想的特别好,用BitmapFactory 把图片进行缩放,缩放后OOM出现的频率降低了,但是效率特别慢,连跳转到该页面都需要3秒,身为技术的我都不能忍受这么慢的速度,点击下面的小图也是要等2-3秒,上面的大图才会相应的改变。后来一个朋友给我介绍了 ImageLoader 这个神级的东西,给我截图,一步一步的步骤都给我说了,但是套在自己的项目上就是有问题,然后问的朋友都无语了,只好自己在网上查关于imageLoader的文章来学习,看了好几篇都不是我想要的,因为步骤和朋友给我发的一模一样,我真找不出什么不同,后来自己摸索着改好了,不多说了,上代码了

首先要导入imageLoader的jar包到你的libs目录下         jia包下载地址:http://pan.baidu.com/s/1kTxMOQj



然后 要建一个继承自Appliaction的类,在里面配置ImageLoader的参数

public class FFApplication extends Application
{
    
    private static FFApplication mApplication;
   
 public void onCreate()
    {
        // TODO Auto-generated method stub
        super.onCreate();
        mApplication = this;
        // 创建默认的ImageLoader配置参数
        initImageLoader(this);
}
public static FFApplication getInstance()
    {
        return mApplication;
    }

ImageLoaderConfiguration是图片加载器ImageLoader的配置参数,使用了建造者模式,这里是直接使用了createDefault()方法创建一个默认的ImageLoaderConfiguration,当然我们还可以自己设置ImageLoaderConfiguration

/***
     * 
     * @Title: initImageLoader
     * @Description: 初始化ImageLoader
     * @param @param context 设定文件
     * @return void 返回类型
     * @throws
     */
    public void initImageLoader(Context context)
    {
        ImageLoaderConfiguration config =
            new ImageLoaderConfiguration.Builder(context).threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .discCacheFileNameGenerator(new Md5FileNameGenerator())
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .writeDebugLogs()
                .threadPoolSize(2)
                .memoryCache(null)
                .build();
        ImageLoader.getInstance().init(config);
    }

之前我以为showImageForEmptyUri(sexyclothings[resId]) 就是加载图片了,我直接把大图放在了这些括号里,加载2次后就报OOM

    public DisplayImageOptions getOptions(int resId)
    {
     // 使用DisplayImageOptions.Builder()创建DisplayImageOptions 
        DisplayImageOptions myOptions = new DisplayImageOptions.Builder().showStubImage(sexyclothings[resId]) // 设置图片下载期间显示的图片
            .showImageForEmptyUri(sexyclothings[resId])// 设置图片Uri为空或是错误的时候显示的图片
            .showImageOnFail(sexyclothings[resId])// 设置图片加载或解码过程中发生错误显示的图片
            .cacheInMemory(true)// 设置下载的图片是否缓存在内存中
            .cacheOnDisc(true)// 设置下载的图片是否缓存在SD卡中
            .bitmapConfig(Bitmap.Config.RGB_565)// 设置下载的图片是否缓存在SD卡中
            .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
            .build();   // 创建配置过得DisplayImageOption对象
        return myOptions;
    }
displayImage()加载图片


现在要加载图片了,我查了几个博文后 觉的最方便的还是displayimage(),因为我是读取的本地图片,所以 要生成一个本地图片的url

 
 /** 大图片源数组 */
    private final Integer clothings[] = new Integer[] {R.drawable.sexy_img_big0, R.drawable.sexy_img_big1,
        R.drawable.sexy_img_big2, R.drawable.sexy_img_big3};
    
    /** 大图片对应的缩略图源数组 */
    private final int sexyclothings[] = new int[] {R.drawable.sexy_img_s0, R.drawable.sexy_img_s1,
        R.drawable.sexy_img_s2, R.drawable.sexy_img_s3};
    

String drawableUrl = Scheme.DRAWABLE.wrap(clothings[pieceNumberNow] + "");
<span><span class="comment">String imageUrl = "https://img-my.csdn.net/uploads/201309/01/1378037235_7476.jpg";</span><span>  //也可以直接加载网络图片
</span></span>
 ImageLoader.getInstance().displayImage(drawableUrl,
            iv_belle_game_picture,
            maApplication.getInstance().getOptions(clothings[pieceNumberNow]));


 千万不要忘记在清单文件中配置你的Application哦

    <application
        android:name="com.imatrixmob.ffime.common.base.FFApplication"
        android:icon="@drawable/fflogo"
        android:label="@string/app_name_IME"
        android:windowSoftInputMode="adjustResize"
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值