最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录。

现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧。

一、Picasso

   1,首先在项目中引入picasso(以gradle为例),也就是app的build.gradle

    

 compile 'com.squareup.picasso:picasso:2.5.2'

   2,加载图片,通过源码可以发现load方法主要要以下几种重载

    load(Uri uri)  

    load(String path)

    load(File file)

    load(int resourceId)

 最常使用的应该就是网络加载图片,网络请求完数据之后存到List数组中

 Picasso.with(AppApplication.getmContext())//上下文
.load(list.get(i).getPath_vertical_s())//加载的地址
.resize(94, 131)//设置显示的图片大小
.placeholder(R.mipmap.ic_launcher)//图片较大加载慢时显示的图片
.error(R.mipmap.birth)//加载错误时的图片
.into(holder.iv_movie_abouttoshow_moviephoto);//指定显示图片的控件

Picasso的缓存机制:

Picasso的缓存流程是先检查内存是否有保存该图片,如果没有则检查磁盘是否有保存该图片,如果没有则从网络下载,下载成功之后分别保存到内存和磁盘上各一份,如果我们有时候不想缓存该图片或者不想从缓存获取图片,该如何呢?Picasso也给我买提供了相应的控制方法。

.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)

代码含义:该方法表示跳过从磁盘加载图片,并且图片下载之后也不在磁盘中进行缓存。

参数介绍:

    MemoryPolicy.NO_CACHE:直接跳过检查内存是否有缓存该图片

    MemoryPolicy.NO_STORE:图片下载之后不在内存中进行缓存

这里注意只是不在磁盘中缓存,但是会在内存中缓存,因此若内存和磁盘中都不想缓存则需要和 两个方法共同使用,如下:

.networkPolicy(NetworkPolicy.NO_CACHE, NetworkPolicy.NO_STORE)

.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)

NetworkPolicy枚举中还有一个值OFFLINE,这个表示强制从缓存中取,不会发起网络请求,如 果缓存中没有也不会从网络中请求

3、问题

使用Picasso时(另外两个框架也一样),记得有一次使用的死数据,图片地址批量复制的,复制的时候多操作了一个空格,结果就一直没显示,这也是个坑填一下。

二、Glide

Glide和Picasso其实挺相似的,不管是从使用方法还是从出身

1,还是和Picasso一样添加依赖

compile 'com.github.bumptech.glide:glide:3.7.0'

2,加载图片

 //1.网络加载图片到ImageView中,注意这里的大小设置方法和Picasso是有区别的
Glide.with(context).load(imageUrl).override(94,131).into(imageView); //2.当加载网络图片时,由于加载过程中图片未能及时显示,此时可能需要设置等待时的图片,通过placeHolder()方法
Glide.with(context).load(imageUrl).placeholder(R.mipmap.ic_launcher).into(imageView); //3.当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示:
Glide.with(context).load(imageUrl).error(R.mipmap.ic_launcher).into(imageView); //4.显示gif动画,asGif()判断是否是gif动画
Glide.with(context).load(imageUrl).asGif().into(imageView); //5.显示本地视频
String filePath = "/storage/emulated/0/demo/***.mp4";
Glide.with( context ).load( Uri.fromFile( new File( filePath ) ) ).into(video ); //6.缓存策略
Glide.with( context ).load(imageUrl).skipMemoryCache(true).into(imageViewInternet );//跳过内存缓存
Glide.with( context ).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.NONE).into( imageViewInternet );//跳过硬盘缓存

三、Fresco

Fresco使用和其他两个有些区别,因为这里要使用的不是ImageView了而是他自己的图片显示控件

代码上:

<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/iv_movie_abouttoshow_moviephoto"
android:layout_width="93dp"
android:layout_height="121dp"
app:placeholderImage="@mipmap/ic_launcher" />

//其他的属性设置

fresco:fadeDuration="300" // 淡入淡出的持续时间
fresco:actualImageScaleType="focusCrop" // 实际图像的缩放类型
fresco:placeholderImage="@color/wait_color" //占位图
fresco:placeholderImageScaleType="fitCenter" //占位图的缩放类型
fresco:failureImage="@drawable/error" //下载失败显示的图片
fresco:failureImageScaleType="centerInside" //失败图的缩放类型
fresco:retryImage="@drawable/retrying"
//图片加载失败时显示,提示用户点击重新加载,重复加载4次还是没有加载出来的时候才会显示failureImage的图片
fresco:retryImageScaleType="centerCrop" //重新加载的图片缩放类型
fresco:progressBarImage="@drawable/progress_bar" //进度条图片
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="1000"
//进度图自动旋转间隔时间(单位:毫秒ms)
fresco:backgroundImage="@color/blue"
//背景图片,这里的背景图片首先被绘制
fresco:overlayImage="@drawable/watermark"
// 设置叠加图,在xml中只能设置一张叠加图片,如果需要多张图片的话,需要在java代码中设置哦
fresco:pressedStateOverlayImage="@color/red"
// 设置点击状态下的叠加图
fresco:roundAsCircle="false" //设置为圆形图
fresco:roundedCornerRadius="1dp" // 圆角半径
fresco:roundTopLeft="true" // 左上角是否为圆角
fresco:roundTopRight="false"
fresco:roundBottomLeft="false"
fresco:roundBottomRight="true"
fresco:roundWithOverlayColor="@color/corner_color"
fresco:roundingBorderWidth="2dp" //边框的宽度
fresco:roundingBorderColor="@color/border_color" //边框颜色

如果你多次用了Fresco,建议在 Application 初始化,如果只是写着玩,就在应用调用 setContentView() 之前,进行初始化:

AppApplication
 Fresco.initialize(mContext);

加载图片

 Uri uri =  Uri.parse(list.get(i).getPath_vertical_s());
sdv.setImageURI(uri)
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setAutoPlayAnimations(true)
.build();
sdv.setController(controller);

以上就是三种框架的使用方法,此随笔当作学习笔记记录一下。

Android开发三种第三方图片加载的框架的更多相关文章

  1. Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计

    Volley是由Google开源的.用于Android平台上的网络通信库.Volley通过优化Android的网络请求流程,形成了以Request-RequestQueue-Response为主线的网 ...

  2. Android三种基本的加载网络图片方式(转)

    Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 ...

  3. 6_1 持久化模型与再次加载_探讨(1)_三种持久化模型加载方式以及import_meta_graph方式加载持久化模型会存在的变量管理命名混淆的问题

    笔者提交到gitHub上的问题描述地址是:https://github.com/tensorflow/tensorflow/issues/20140 三种持久化模型加载方式的一个小结论 加载持久化模型 ...

  4. Android之Fresco(facebook的强大Android图片加载的框架)

    Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络.本地存储和本地资源中加载图片.其中的Drawees可以显示占位符,直到图片加载完成.而当图片从屏幕 ...

  5. Android开发之多媒体编程之加载大分辨率图片

    Android中图片占用内存的大小=图片的总像数*每个像数占用的大小. Android保存图片像素信息使用ARGB,意思是每个像素占用4个字节. 以分辨率为2400*3200的图片来说,加载到Andr ...

  6. Android Fresco (Facebook开源的图片加载管理库)

    Fresco是Facebook开源的一个图片加载和管理库. 这里是Fresco的GitHub网址. 同类型的开源库市面有非常多,比如Picasso, Universal Image Loader, G ...

  7. 037 Android Glide图片加载开源框架使用

    1.Glide简单介绍 Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片.Glide是一个快速高效的Androi ...

  8. iOS图片加载新框架 - FlyImage

    FlyImage 整合了SDWebImage,FastImageCache,AFNetworking的优点,是一个新的性能高效.接口简单的图片加载框架. 特点 高效 可将多张小图解码后存储到同一张大图 ...

  9. ★android开发--ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)

    例子中用于解析Json的Gson请自己Google下载 主Activity: package COM.Example.Main; import java.util.HashMap; import ja ...

随机推荐

  1. Spring Cloud微服务中网关服务是如何实现的?(Zuul篇)

    导读 我们知道在基于Spring Cloud的微服务体系中,各个微服务除了在内部提供服务外,有些服务接口还需要直接提供给客户端,如Andirod.IOS.H5等等. 而一个很尴尬的境地是,如果直接将提 ...

  2. 编码之痛:操作系统迁移后redis缓存无法命中

    前几天一台内网服务器从ubuntu迁移到了centos,检查一切正常后就没有太在意. 今天有同事反馈迁移后的机器上的服务一个缓存总是无法获取,对比了下环境.JVM参数,尝试了war包替换等方式照样复现 ...

  3. ASP.NET Core微服务+Tabler前端框架搭建个人博客1--开始前想说的话

    写在前面 本人为在读研究生,特别喜欢.NET,觉得.NET的编程方式.语法都特别友好,学习.NET Core已经差不多有一年半了,从一开始不知道如何入门到现在终于可以编写一些小的应用程序,想一想还是非 ...

  4. java提高(9)---HashMap解析

    HashMap解析(一) 平时一直再用hashmap并没有稍微深入的去了解它,自己花点时间想往里面在深入一点,发现它比arraylist难理解很多. 数据结构中有数组和链表来实现对数据的存储,但这两者 ...

  5. State状态模式

    1.简介 在日常开发中,某些对象的状态如果发生改变,对应的行为也将发生改变,那么如何在运行时根据对象的状态动态的改变对象的行为,同时不产生紧耦合关系(即使用if else或者swith所带来的紧耦合关 ...

  6. CentOS7.0小随笔——运行级别

    一.Linux运行级别(通用) 0:关机(halt) 1:单用户模式(无需用户名和密码的登录,用于紧急维护系统时用,类似于Windows中的安全模式) 2:不启用网络功能的多用户模式 3:启用网络功能 ...

  7. k8s网络之calico

    一.概述 前面我们部署calico由于集群规模不是很大,使用的是calico的bgp模式的node-to-node-mesh全节点互联,这种模式在小规模集群里面还可以用,3.4.0版本的calico支 ...

  8. Perl子程序引用和匿名子程序

    子程序也有引用,也有匿名子程序.假设你已经具备了数组.hash的引用知识,所以这里简单介绍一下. $ref_sub = \&mysub; # 子程序引用,&符号必须不能少 &{ ...

  9. SQL行转列:decode函数

    前言 开发中我们经常会用到行转列,这里记录一下我在项目中实现行转列的思路.需求:报表模块,统计某机房机架的不同状态(1 空闲  2 预占  3 占用)的数量(真实需求更为复杂,这里只是讨论技术,简化一 ...

  10. python下载安装BeautifulSoup库

    python下载安装BeautifulSoup库 1.下载https://www.crummy.com/software/BeautifulSoup/bs4/download/4.5/ 2.解压到解压 ...