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);
  }
 });
 }
}

源码下载...

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • Android中RecyclerView 滑动时图片加载的优化

    RecyclerView 滑动时的优化处理,在滑动时停止加载图片,在滑动停止时开始加载图片,这里用了Glide.pause 和Glide.resume.这里为了避免重复设置增加开销,设置了一个标志变量来做判断. mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, in

  • Android实现异步加载图片

    麦洛开通博客以来,有一段时间没有更新博文了.主要是麦洛这段时间因项目开发实在太忙了.今天周六还在公司加班,苦逼程序猿都是这样生活的. 今天在做项目的时候,有一个实现异步加载图片的功能,虽然比较简单但还是记录一下吧.因为麦洛之前实现异步加载图片都是使用了AsynTask这个API,继续这个类,实现起来非常简单也很方便.在doInBackground()方法里实现下载逻辑.具体实现如下 实现逻辑是:先从内存中读取,如果内存中有这张图片,则直接使用;如果内存没有再到sdcard上读取,如果有则显示;如

  • Android仿微信朋友圈点击加号添加图片功能

    本文为大家分享了类似微信朋友圈,点击+号图片,可以加图片功能,供大家参考,具体内容如下 xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto

  • Android自定义实现图片加文字功能

    Android自定义实现图片加文字功能 分四步来写: 1,组合控件的xml; 2,自定义组合控件的属性; 3,自定义继承组合布局的class类,实现带两参数的构造器; 4,在xml中展示组合控件. 具体实现过程: 一.组合控件的xml 我接触的有两种方式,一种是普通的Activity的xml:一种是父节点为merge的xml.我项目中用的是第一种,但个人感觉第二种好,因为第一种多了相对或者绝对布局层. 我写的 custom_pictext.xml <?xml version="1.0&qu

  • android图片文件的路径地址与Uri的相互转换方法

    一个android文件的Uri地址一般如下: content://media/external/images/media/62026 这是一张图片的Uri,那么我们如何根据这个Uri获得其在文件系统中的路径呢? 其实很简单,直接上代码: public static String getRealFilePath( final Context context, final Uri uri ) { if ( null == uri ) return null; final String scheme

  • Android 实现获取手机里面的所有图片详解及实例

    Android 实现获取手机里面的所有图片详解及实例 实现代码: public class MainActivity extends Activity { //查看图片按钮 private Button look; private Button add; //显示图片名称的list ListView show_list; ArrayList names = null; ArrayList descs= null; ArrayList fileNames = null; @Override pro

  • Android异步下载图片并且缓存图片到本地DEMO详解

    在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML资源,其中包括图片,我们要做的解析XML里面的数据,并且把图片缓存到本地一个cache目录里面,并且用一个自定义的Adapter去填充到LIstView,demo运行效果见下图: 通过这个demo,要学会有一下几点 1.怎么解析一个XML 2.demo中用到的缓存图片到本地一个临时目录的思想是怎样的? 3.AsyncTask类的使用,因为要去异

  • Android常用的图片加载库

    前言:图片加载涉及到图片的缓存.图片的处理.图片的显示等.四种常用的图片加载框架,分别是Fresco.ImageLoader. Picasso. Glide. Universal Image Loader:ImageLoader是比较老的框架,一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛. ImageLoader开源库存哪些特征: 1.多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 2.支持随意的配置ImageLoader,例如线

  • Android 官推 kotlin-first 的图片加载库——Coil的使用入门

    Coil 是一个非常年轻的图片加载库,在 2020 年 10 月 22 日才发布了 1.0.0 版本,但却受到了 Android 官方的推广,在 Android Developers Backstage 这个博客中专门聊过一期.推广的原因比较简单:一方面是这个库确实做得很好,另一方面是这个库完全是用 Kotlin 写的,而且运用了大量 Kotlin 的特性,尤其是协程.所以 Google 嘴上说着不会放弃 Java,但实际上咱们都懂的. Coil 名字的由来:取 Coroutine Image

  • Android图片加载库Glide用法

    目录 Glide介绍 Android SDK 要求 使用前的准备 基本用法 在 ListView 和 RecyclerView 中的使用 占位符 选项 过渡动画 变换效果 使用示例 Glide介绍 Glide是一个快速高效的Android图片加载库,注重于平滑的滚动.Glide提供了易用的API,高性能.可扩展的图片解码管道,以及自动的资源池技术.Glide 的主要目标是让任何形式的图片列表的滚动尽可能地变得更快.更平滑. Android SDK 要求 Min Sdk Version - 使用

  • Android 常见的图片加载框架详细介绍

    Android 常见的图片加载框架 图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行图片加载. 开源框架的源码还是挺复杂的,但使用较为简单.大部分框架其实都差不多,配置稍微麻烦点,但是使用时一般只需要一行,显示方法一般会提供多个重载方法,支持不同需要.这样会减少很不必要的麻烦.同时,第三方框架的使用较为方便,这大大的减少了工作量.提高了开发效率.

  • kotlin项目加入Glide图片加载库并使用GlideApp的方法

    前言 之前一直是在java项目中使用Glide加载图片,自从去年Google宣布Kotlin成为Android官方开发语言之后,我也开始使用kotlin开发了项目,自从使用kotlin之后,再也回不到了java的怀抱了. 现在,Glide的版本也进行了几个大的升级,目前,最新的版本是4.8.0,提供了很多的新的特性,GlideAPP就是其中一个,唯一不足的就是,还没有引入对AndroidX的支持,不过听说是在5.0之后开始对AndroidX支持,让我们拭目以待吧,下面我们开始在kotlin项目中

  • 深入剖析Android的Volley库中的图片加载功能

    一.基本使用要点回顾 Volley框架在请求网络图片方面也做了很多工作,提供了好几种方法.本文介绍使用ImageLoader来进行网络图片的加载. ImageLoader的内部使用ImageRequest来实现,它的构造器可以传入一个ImageCache缓存形参,实现了图片缓存的功能,同时还可以过滤重复链接,避免重复发送请求. 下面是ImageLoader加载图片的实现方法: public void displayImg(View view){ ImageView imageView = (Im

  • Android图片加载框架Coil的详细使用总结

    目录 简介 简单使用 高斯模糊 圆角 圆形 灰色变换 GrayscaleTransformation Gif 监听下载过程 取消下载 替换 okhttp 实例 自定义 Coil 源码分析 总结 简介 Coil 是一个 Android 图片加载库,通过 Kotlin 协程的方式加载图片.特点如下: 更快: Coil 在性能上有很多优化,包括内存缓存和磁盘缓存,把缩略图存保存在内存中,循环利用 bitmap,自动暂停和取消图片网络请求等. 更轻量级: Coil 只有2000个方法(前提是你的 APP

  • Android图片加载的缓存类

    本文为大家分享了Android图片加载的缓存类,供大家参考,具体内容如下 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftReferenc

  • Android中Glide加载库的图片缓存配置究极指南

    零.选择Glide 为什么图片加载我首先推荐Glide? 图片加载框架用了不少,从afinal框架的afinalBitmap,Xutils的BitmapUtils,老牌框架universalImageLoader,著名开源组织square的picasso,google推荐的glide到FaceBook推出的fresco.这些我前前后后都体验过,那么面对这么多的框架,该如何选择呢?下面简单分析下我的看法. afinal和Xuils在github上作者已经停止维护了,开源社区最新的框架要属KJFra

  • 详解Android GLide图片加载常用几种方法

    目录 缓存浅析 GLide图片加载方法 图片加载周期 图片格式(Bitmap,Gif) 缓存 集成网络框架 权限 占位符 淡入效果 变换 启动页/广告页 banner 固定宽高 圆角 圆形 总结 缓存浅析 为啥要做缓存? android默认给每个应用只分配16M的内存,所以如果加载过多的图片,为了 防止内存溢出 ,应该将图片缓存起来. 图片的三级缓存分别是: 1.内存缓存 2.本地缓存 3.网络缓存 其中,内存缓存应优先加载,它速度最快:本地缓存次优先加载,它速度也快:网络缓存不应该优先加载,它

随机推荐