全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

源码下载...

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


# android  # 加载  # 图片  # Android Fresco图片加载优化的方案  # Android实现图片加载进度提示  # Android框架Volley使用:ImageRequest请求实现图片加载  # Android编程图片加载类ImageLoader定义与用法实例分析  # Android基于Glide v4.x的图片加载进度监听  # Android ListView实现ImageLoader图片加载的方法  # Android图片加载案例分享  # Android中RecyclerView 滑动时图片加载的优化  # Android图片加载框架Glide的基本用法介绍  # Android图片加载利器之Picasso基本用法  # Android 官推 kotlin-first 的图片加载库——Coil的使用入门  # 开源  # 文件系统  # 跳过  # 其他的  # 也可  # 较好  # 或者是  # 做一个  # 可以使用  # 涉及到  # 四种  # 什么都不  # 多线程  # 较慢  # 更小  # 源码下载  # 过程中  # 各种各样  # 而不是 


相关文章: 昆明高端网站制作公司,昆明公租房申请网上登录入口?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  如何获取免费开源的自助建站系统源码?  如何用wdcp快速搭建高效网站?  Python文件管理规范_工程实践说明【指导】  微信小程序制作网站有哪些,微信小程序需要做网站吗?  行程制作网站有哪些,第三方机票电子行程单怎么开?  制作农业网站的软件,比较好的农业网站推荐一下?  魔方云NAT建站如何实现端口转发?  b2c电商网站制作流程,b2c水平综合的电商平台?  如何快速完成中国万网建站详细流程?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  海南网站制作公司有哪些,海口网是哪家的?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何选择适配移动端的WAP自助建站平台?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  如何选择最佳自助建站系统?快速指南解析优劣  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何快速搭建虚拟主机网站?新手必看指南  寿县云建站:智能SEO优化与多行业模板快速上线指南  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  个人摄影网站制作流程,摄影爱好者都去什么网站?  建站之星×万网:智能建站系统+自助建站平台一键生成  学校建站服务器如何选型才能满足性能需求?  如何破解联通资金短缺导致的基站建设难题?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  如何在阿里云通过域名搭建网站?  如何配置支付宝与微信支付功能?  建站之星如何实现五合一智能建站与营销推广?  建站之星后台密码遗忘?如何快速找回?  h5在线制作网站电脑版下载,h5网页制作软件?  如何快速选择适合个人网站的云服务器配置?  用v-html解决Vue.js渲染中html标签不被解析的问题  山东云建站价格为何差异显著?  实例解析angularjs的filter过滤器  大型企业网站制作流程,做网站需要注册公司吗?  网站制作难吗安全吗,做一个网站需要多久时间?  建站之星与建站宝盒如何选择最佳方案?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  小型网站建站如何选择虚拟主机?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  如何快速查询网站的真实建站时间?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  网站制作价目表怎么做,珍爱网婚介费用多少?  网站制作软件有哪些,制图软件有哪些? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。