1、图片框架:Picasso、Glide、Fresco

2.介绍:

picasso:和Square的网络库能发挥最大作用,因为Picasso可以选择将网络请求的缓存部分交给了okhttp实现

Glide:模仿了Picasso的API,而且在他的基础上加了很多的扩展(比如git等支持)

Picasso能实现的功能,Glide都能实现,但Picasso体积比Glide小很多,如果项目中网络请求本身用的就是okhttp或者retrofit(本质还是okhttp),那么建议用Picasso,Glide的好处是大型的图片流,比如git、video等

Glide详解:

创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。

Glide特点:

  • 使用简单
  • 可配置度高,自适应程度高
  • 支持常见图片格式jpg、png、gif、webp
  • 支持多种资源 玩过、本地、资源、Assets等
  • 高效缓存策略 支持Memory和Disk图片缓存,默认Bitmap格式采用RGB_565内存使用至少减少一半
  • 生命周期集成 根据Activity/Fragment生命周期自动管理请求
  • 高效处理Bitmap 使用Bitmap Pool使Bitmap复用,制动调用recycle回收需要回收的Bitmap,减小系统回收压力

Glide使用:

1、添加引用build.gradle中添加配置

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

2、设置绑定生命周期

Glide.with(Context context); //绑定Context

Glide.with(Activity activity);//绑定Activity

Glide.with(FragmentActivity activity);//绑定FragmentActivity

Glide.with(Fragment fragment);//绑定Fragment

3、简单的加载图片实例

Glide.with(this).load(imgUrl).into(imageView);

4、设置加载中及加载失败图片

api里面对placeholder(),error()函数中有多态实现

Glide.with(this).load(imageUrl)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(imageView);

5、设置跳过内存缓存

Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);

6、设置下载优先级

Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);

7、设置缓存策略

Glide.with(this).load(imageUrl)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);

策略解说:

all:缓存元资源和转换后的资源

none:不作任何磁盘缓存

source:缓存源资源

result:缓存转换后的资源

8、设置加载动画

api也提供了几个常用的动画:比如crossFade()

Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);

R.anim.item_alpha_in:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">

    <alpha

        android:duration="500"

        android:fromAlpha="0.0"

        android:toAlpha="1.0"/>

</set>

9、设置缩略图

这样会先加载缩略图,在加载全图

Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);

10、设置加载尺寸

Glide.with(this).load(imageUrl).overrde(800,800).into(imageView);

11设置动态转换

Glide.with(this).load(imageUrl).centerCrop().into(imageView);

12、设置动态GIF加载方式

 Glide.with(this).load(imageUrl).asBitmap().into(imageView);//显示gif静态图片
Glide.with(this).load(imageUrl).asGif().into(imageView);//显示gif动态图片

13、缓存的动态清理

 Glide.get(this).clearDiskCache();//清理磁盘缓存 需要在子线程中执行
Glide.get(this).clearMemory();//清理内存缓存 可以在UI主线程中进行

14、加载网络图片实现等比例缩放

        Glide.with(mContext)
.load(url)
.asBitmap()//强制Glide返回一个Bitmap对象
.listener(new RequestListener<String, Bitmap>() {
@Override
public boolean onException(Exception e, String s, Target<Bitmap> target, boolean b) {
LogUtil.e(url+"加载失败"+e.toString());
Glide.with(mContext)
.load(R.mipmap.pic_default_vertical)
.diskCacheStrategy(cache)
.into(iv);
return false;
} @Override
public boolean onResourceReady(Bitmap bitmap, String s, Target<Bitmap> target, boolean b, boolean b1) {
return false;
}
})
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int S_width = DisplayUtil.getScreenWidth(mContext);
int S_height = DisplayUtil.getScreenHeight(mContext); float scale = ((float) height)/width;
iv.setImageBitmap(bitmap);
if(width>height){
float S_scale = S_height/(S_width*scale);
if(isRightToLeft){
iv.setScale(S_scale,S_height*S_scale,0,false);
}else{
iv.setScale(S_scale,0,0,false);
} }
}
});

Android 图片框架的更多相关文章

  1. Android图片框架---Glide

    Glide *** 使用* 一.添加依赖* compile 'com.github.bumptech.glide:glide:3.7.0'* compile 'com.android.support: ...

  2. android 图片解码显示流程

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jingxia2008/article/details/32327699 问题来源 android 能 ...

  3. Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...

  4. Android图片加载与缓存开源框架:Android Glide

    <Android图片加载与缓存开源框架:Android Glide> Android Glide是一个开源的图片加载和缓存处理的第三方框架.和Android的Picasso库类似,个人感觉 ...

  5. 一起写一个Android图片加载框架

    本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做 ...

  6. Android 开源框架Universal-Image-Loader全然解析(二)--- 图片缓存策略具体解释

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...

  7. Android 图片加载框架Glide4.0源码完全解析(二)

    写在之前 上一篇博文写的是Android 图片加载框架Glide4.0源码完全解析(一),主要分析了Glide4.0源码中的with方法和load方法,原本打算是一起发布的,但是由于into方法复杂性 ...

  8. Android图片缓存框架Glide

    Android图片缓存框架Glide Glide是Google提供的一个组件.它具有获取.解码和展示视频剧照.图片.动画等功能.它提供了灵活的API,帮助开发者将Glide应用在几乎任何网络协议栈中. ...

  9. Android图片载入框架最全解析(一),Glide的基本使用方法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号.扫一扫文章底部的二维码或在微信搜索 郭 ...

随机推荐

  1. 线程私有数据TSD——一键多值技术,线程同步中的互斥锁和条件变量

    一:线程私有数据: 线程是轻量级进程,进程在fork()之后,子进程不继承父进程的锁和警告,别的基本上都会继承,而vfork()与fork()不同的地方在于vfork()之后的进程会共享父进程的地址空 ...

  2. go输入Hello word

    package main import "fmt" func main() {     fmt.Println("hello word") } 输入hello ...

  3. adduser vs useradd

    Always use adduser (and deluser when deleting users) when you're creating new users from the command ...

  4. redis sentinel搭建

    /usr/local/bin /usr/local/etc https://www.centos.bz/2017/08/redis-3-x-sentinel-ha-service/ https://w ...

  5. Python | Python语法基础

    目录 前言 1. 变量与简单数据结构 2. 列表相关 3. 集合 4. If语句 5. 字典 6. 用户输入和while循环 7. 函数 8. 类与对象 9. 文件 10. 异常 11. 测试 最后 ...

  6. VS Code Java 更新 – 全新Gradle for Java插件,更方便的代码操作, 1.0 语言支持发布

    大家好,欢迎来到 9 月版的 Visual Studio Code Java 更新.在这篇文章中,我们将分享我们最新的Gradle插件,更加方便的代码操作(Getter/Setter等等),以及最近的 ...

  7. [hdu6581]Vacation

    首先发现,最终第0辆车一定被堵在某一辆车前,那么等价于它的初始位置就在(那辆车的位置+中间车的车长)/那辆车的速度,其中最大的那个就是答案因此得出结论:$ans=max((\sum_{j=1}^{i} ...

  8. [atAGC050A]AtCoder Jumper

    考虑二叉树的结构,但并不容易构造从叶子返回的边 (以下为了方便,将所有点编号为$[0,n)$) 对于$i$,选择$2i\ mod\ n$和$(2i+1)\ mod\ n$这两条出边 从二叉树的角度并不 ...

  9. 实用QPS和TPS高的高效分析方法

    现在主库的MySQL的QPS一直在3K/s左右,想知道其到底执行了那些SQL,或者是那些SQL执行的次数比较多: 腾讯云的后台监控: 开启腾讯云的SQL审计后,下载几分钟SQL日志文件, 下列语句在M ...

  10. OOM机制

    Linux内核根据应用程序的要求分配内存,通常来说应用程序分配了内存但是并没有实际全部使用,为了提高性能,这部分没用的内存可以留作它用,这部分内存是属于每个进程的,内核直接回收利用的话比较麻烦,所以内 ...