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

现在项目使用的是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. ModelState 错误信息输出

    在MVC的项目中,我们通常情况下,为了方便(偷懒),会直接使用 !ModelState.IsValid 来判断实体的验证是否正确,但是这样对于用户的体验是不好的,当填写的内容比较多的时候,用户需要自己 ...

  2. Spring IOC分析

    前言 关于Spring,我想无需做太多的解释了.每个Java程序猿应该都使用过他.Spring的ioc和aop极大的方便了我们的开发,但是Spring又有着不好的一面,为了符合开闭原则,Spring的 ...

  3. Shell脚本-自动化部署WEB

    #! /bin/ ] then echo "#### 参数有误,\$1:构建号必填" exit fi cd /root/workspace/xinya_erp/xinya_web ...

  4. 获取完全一样的数据库,包括表与表之间的外键关系,check,default表结构脚本

    今天公司给了一个任务,某一个项目由于数据过大,造成Sql Server 2012 的运行占用很大内存,于是要把之前的不常用的数据分开.要求写个脚本,要求: 1.能获取原来数据库中的表结构,主键一致.表 ...

  5. 【原创】驱动加载之CreateService

    SC_HANDLE WINAPI CreateService( _In_ SC_HANDLE hSCManager, _In_ LPCTSTR lpServiceName, _In_opt_ LPCT ...

  6. linux读书笔记1

    (1)进入控制台命令快捷键:Ctrl+alt+F1~F7

  7. (转)解决 TortoiseGit 诡异的 Bad file number 问题

    此问题,请不要使用 rebase, 下载最新的 TortoiseGit 即可: TortoiseGit-2.3中文版与Git安装包_手册: http://download.csdn.net/detai ...

  8. MySQL系列详解一:MySQL&&多实例安装-技术流ken

    简介 MySQL是一个真正的多用户.多线程SQL数据库服务器.SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言,它使得存储.更新和存取信息更加容易.MySQL是一个客户机/服务器结构的实现 ...

  9. ElasticSearch集群环境搭建

    一 .单机部署 1.下载安装包.解压 2.在window下运行bin/elasticsearch.bat 3.访问localhost:9200 页面显示结果 { "name" : ...

  10. Python爬虫之诗歌接龙

    介绍   本文将展示如何利用Python爬虫来实现诗歌接龙.   该项目的思路如下: 利用爬虫爬取诗歌,制作诗歌语料库: 将诗歌分句,形成字典:键(key)为该句首字的拼音,值(value)为该拼音对 ...