Android常用的图片加载库

 Android常用的图片加载库

前言:图片加载涉及到图片的缓存、图片的处理、图片的显示等。四种常用的图片加载框架,分别是Fresco、ImageLoader、 Picasso、 Glide。

Universal Image Loader:ImageLoader是比较老的框架,一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛。

  ImageLoader开源库存哪些特征:

    1.多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等

    2.支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置

    3.支持图片的内存缓存,文件系统缓存或者SD卡缓存

    4.支持图片下载过程的监听

    5.根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存

    6.较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加加载图片,停止滑动的时候去加载图片

    7.提供在较慢的网络下对图片进行加载

Glide:Google推荐的图片加载库,专注于流畅的滚动。

  Glide开源库特征:

    1.支持 Gif、WebP、缩略图。甚至是 Video,所以更该当做一个媒体缓存。

    2.支持优先级处理。

    3.内存友好,图片默认使用默认 RGB_565 而不是 ARGB_888,虽然清晰度差些,但图片更小,也可配置到 ARGB_888等...

Picasso:Picasso是Square公司出品的一款非常优秀的开源图片加载库,是目前Android开发中超级流行的图片加载库之一,和OkHttp搭配起来更配呦!

     详情使用.

Fresco:Facebook出的,天生骄傲!不是一般的强大。

     详情使用.

效果(具体见源码):

开发环境:AndroidStudio2.2.1+gradle-2.14.1

引入依赖:

 //适配器
    compile ‘com.classic.adapter:commonadapter:1.2‘
    //注解式开发
    compile ‘com.jakewharton:butterknife:7.0.1‘

    compile ‘com.nostra13.universalimageloader:universal-image-loader:1.9.4‘

    compile ‘com.github.bumptech.glide:glide:3.6.1‘

    compile ‘com.squareup.picasso:picasso:2.5.2‘

涉及知识:

  1.注解式开发+(Commonadapter)万能适配器使用

  2.图片加载库:ImageLoader、Glide、Picasso

  3.WebView+SwipeRefreshLayout实现加载和刷新网页

部分代码(Gilde使用):

public class GildeActivity extends BaseActivity {

    /**
     * Glide的主要目的有两个:
     * 1.一个是实现平滑的图片列表滚动效果,
     * 2.另一个是支持远程图片的获取、大小调整和展示
     * 3.支持Gif 动画和视频剧照解码、智能的暂停和重新开始请求、支持缩略图

     * http://www.open-open.com/lib/view/open1440397324450.html
     */

    @Bind(R.id.img)
    ImageView img;

    @Bind(R.id.listview)
    ListView listView;

    private String imgurl = "http://avatar.csdn.net/4/A/A/1_zhh_csdn_ard.jpg";

    @Override
    protected int setContentView() {
        return R.layout.gilde_img_layout;
    }

    @Override
    protected void initLayout() {
        GlideAdapter adapter = new GlideAdapter(this, R.layout.listview_img_item, AppConfig.resultImgData());
        listView.setAdapter(adapter);
    }

    @OnClick({R.id.btn0, R.id.btn1, R.id.btn2})
    void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn0:
                test0();
                break;
            case R.id.btn1:
                test1();
                break;
            case R.id.btn2:
                // 必须在UI线程中调用
                Glide.get(GildeActivity.this).clearMemory();
                break;

        }

    }

    //基础glide网络图片加载
//      Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取

    //    图片的缩放,centerCrop()和fitCenter():
    //使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView的
    private void test0() {
        Glide.with(this)
                .load(imgurl)//路径支持png,jpg,gif,mp4
                .placeholder(R.mipmap.ic_launcher) // 预加载图片
                .error(R.mipmap.ic_launcher)//加载图片失败
                .crossFade()//淡入淡出动画效果
                .centerCrop()
                .into(img);

    }

    //gif显示
    private void test1() {
        Glide.with(this)
                .load("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&              sec=1491037864865&di=cc8f78a7e5c1d359839cec3463123b47&imgtype=0&              src=http%3A%2F%2Fi.zeze.com%2Fattachment%2Fforum%2F201501%2F29%2F181236dyjtsu2qinms5qjz.jpg")
                .asGif() //判断加载的url资源是否为gif格式的资源
                .placeholder(R.mipmap.ic_launcher) // 预加载图片
                .error(R.mipmap.ic_launcher)//加载图片失败
                .into(img);
//         .into(new GlideDrawableImageViewTarget(img, 1));//如果要控制Gif 显示次数,可以使用

    }

    // 显示本地视频
    private void test2() {

        String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
        Glide
                .with(this)
                .load(Uri.fromFile(new File(filePath)))
                .into(img);
    }

    //缓存
    private void test3() {
        Glide
                .with(this)
                .load(imgurl)
                .skipMemoryCache(true) //跳过内存缓存
                .into(img);
    }

    //缓存
    private void test4() {
        Glide
                .with(this)
                .load(imgurl)
                .diskCacheStrategy(DiskCacheStrategy.NONE) //跳过硬盘缓存
                .into(img);
    }

    /**
     * DiskCacheStrategy.NONE 什么都不缓存
     * DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像
     * DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的)
     * DiskCacheStrategy.ALL 缓存所有版本的图像(默认行为)
     */

//    使用Glide 显示圆形图片
    private void test5() {
        Glide.with(this).load(imgurl).asBitmap().centerCrop().into(new BitmapImageViewTarget(img) {
            @Override
            protected void setResource(Bitmap resource) {
                RoundedBitmapDrawable circularBitmapDrawable =
                        RoundedBitmapDrawableFactory.create(GildeActivity.this.getResources(), resource);
                circularBitmapDrawable.setCircular(true);
                img.setImageDrawable(circularBitmapDrawable);
            }
        });
    }

}

源码下载...

时间: 2024-10-21 01:09:35

Android常用的图片加载库的相关文章

Android图片加载库:最全面的Picasso讲解

前言 上文已经对当今 Android主流的图片加载库 进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里阅读 今天我们来学习其中一个Android主流的图片加载库的使用 - Picasso 目录 1. 简介 介绍:Picasso,可译为"毕加索",是Android中一个图片加载开源库 大概是因为其使用使用方法简单.优雅所以这样取名 主要作用:实现图片加载 2. 功能特点 2.1 功能列表 从上面可以看出,Picasso不仅实现了图片异步加载的功能,还解决了Androi

android图片加载库Glide

什么是Glide? Glide是一个加载图片的库,作者是bumptech,它是在泰国举行的google 开发者论坛上google为我们介绍的,这个库被广泛的运用在google的开源项目中. Glide解决什么问题? Glide是一个非常成熟的图片加载库,他可以从多个源加载图片,如:网路,本地,Uri等,更重要的是他内部封装了非常好的缓存机制并且在处理图片的时候能保持一个低的内存消耗. Glide怎么使用? 在Glide的使用方面,它和Picasso的使用方法是比较相似的,并且他们的运行机制也有很

FaceBook推出的Android图片加载库-Fresco

FaceBook推出的Android图片加载库-Fresco 原文链接:Introducing Fresco: A new image library for Android 译者 :  ZhaoKaiQiang 校对者: Chaossss 校对者: bboyfeiyu 校对者: BillionWang 状态 :  完成 在Android设备上面,快速高效的显示图片是极为重要的.过去的几年里,我们在如何高效的存储图像这方面遇到了很多问题.图片太大,但是手机的内存却很小.每一个像素的R.G.B和a

Android图片加载库的理解

前言 这是“基础自测”系列的第三篇文章,以Android开发需要熟悉的20个技术点为切入点,本篇重点讲讲Android中的ImageLoader这个库的一些理解,在Android上最让人头疼是从网络中获取图片,显示,回收,任何一个环节有问题都可能直接OOM,当需要加载大量的图片的时候,每当快速滑,有时候会很卡,甚至会因为内存溢出而崩溃.这里讲解的库是:Universal_Image_Loader. 内容目录 ImageLoader设计原理 ImageLoader流程图 ImageLoader的使

Android图片加载库Picasso源码分析

图片加载在Android开发中是非常重要,好的图片加载库也比比皆是.ImageLoader.Picasso.Glide.Fresco均是优秀的图片加载库. 以上提到的几种图片加载库各有特色.用法与比较,网上已经很多了. 出于学习的角度,个人认为从Picasso入手较好.代码量小,同时API优美,很适合我们学习. 今天笔者就Picasso的源码进行分析,抛出一些图片加载的技术细节供园友参考. PS:建议园友先大致看一下源码. 我们对图片加载的要求 1.加载速度要快 2.资源消耗要低 3.加载图片不

Android图片加载库的封装实战之路

前言 主流图片加载库的对比 Android-Universal-Image-Loader Picasso Glide Fresco 按需选择图片加载库 如何更好地封装图片加载库 为什么要封装 使用策略模式封装图片加载策略 源码地址 部分参考链接 前言 图片加载是Android开发中最最基础的功能,为了降低开发周期和难度,我们经常会选用一些图片加载的开源库 选取第三方SDK需要谨慎 二次封装 主流图片加载库的对比 共同点 使用简单:一句话实现图片的获取和显示 可配置性高:可配置各种解码.缓存.下载

谷歌推荐的Android图片加载库(Glide)介绍

本文出自:http://blog.csdn.net/u011733020 原      文:https://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en 在过去的谷歌开发者峰会,谷歌给我们介绍了一个图片加载库,bumptech开发的一个名字叫Glide 的Android图像加载库.它已被用于许多谷歌开源项目,到现在为止,包括谷歌I / O 2014官方应用.它成功地使我感兴趣.我花了一整晚的时间和它玩

【Android开发经验】FaceBook推出的Android图片加载库-Fresco

欢迎关注ndroid-tech-frontier开源项目,定期翻译国外Android优质的技术.开源库.软件架构设计.测试等文章 原文链接:Introducing Fresco: A new image library for Android 译者 : ZhaoKaiQiang 校对者: Chaossss 校对者: bboyfeiyu 校对者: BillionWang 状态 : 完成 在Android设备上面,快速高效的显示图片是极为重要的.过去的几年里,我们在如何高效的存储图像这方面遇到了很多

ym——Android图片加载库Glide

转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 前言 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech.这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app. 它的成功让我非常感兴趣.我花了一整晚的时间把玩,决定分享一些自己的经验.在开始之前我想说,Glide和Picasso有90%的相似度,准确的说,就是Picasso的克隆