欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android常用的图片加载库

程序员文章站 2023-01-21 09:53:12
前言:图片加载涉及到图片的缓存、图片的处理、图片的显示等。四种常用的图片加载框架,分别是fresco、imageloader、 picasso、 glide。 unive...

前言:图片加载涉及到图片的缓存、图片的处理、图片的显示等。四种常用的图片加载框架,分别是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出的,天生骄傲!不是一般的强大。

效果(具体见源码):

Android常用的图片加载库

开发环境: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);
  }
 });
 }
}

源码下载...

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