转载请标明出处:http://blog.csdn.net/collorye/article/details/53507396
由于手机APP不断地增多,使得APP的流畅度和缓存功能越来越受到重视。APP与用户的交互主要是在文字、图片和视频居多。那么图片的显示和加载尤为重要,好的图片显示和加载可以更好地留住用户。现在来分析一下当下流行的APP开发中的图片加载的方式。
主要图片加载方式:Glide、Picasso、Fresco
主要分析的功能点:优缺点、具体使用、库的大小
Glide
一.优点
1.可以加载gif图片(一个比较有特色的地方)
2.加载速度快、流畅度高
3.与Picasso相比,with()方法参数上下文显示更多
4.可以使用Picasso大部分功能
二.库的大小
Glide3.7.0:464KB
三.具体使用
1.导入依赖库
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0'
}
2.简单使用
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Glide.with(this).load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg").into(imageView);
3.更强大的使用
(1).with()方法
a.with(Context context)
b.with(Activity activity)
c.with(FragmentActivity activity)
d.with(android.app.Fragment fragment)
e.with(Fragment fragment)
(2).diskCacheStrategy()
可以设置缓存图片的尺寸
4.封装工具类
github地址:https://github.com/tpnet/GlideUtils
四.github网站
https://github.com/bumptech/glide
Picasso
一.优点
1.变换图像可以更好地适应布局,并且减少内存大小
2.错误情况下加载错误图片
3.文件自由和R文件都可以加载
4.有统计和监控的功能
5.并发数可以随网络状态改变
6.可以优先级加载
二.库的大小
Picasso2.5.2:118KB
地址:http://square.github.io/picasso/
三.具体使用
1.导入依赖库
dependencies {
compile 'com.squareup.picasso:picasso:2.5.2'
}
2.简单使用
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
3.更强大的使用
(1).图片转换
Picasso.with(context)
.load(url)
.resize(50, 50)
.centerCrop()
.into(imageView);
(2).加载发生错误的时,加载一张图片作为提示
Picasso.with(context)
.load(url)
.placeholder(R.drawable.user_placeholder)
.error(R.drawable.user_placeholder_error)
.into(imageView);
(3).R文件和文件的加载
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load(new File(...)).into(imageView2);
四.github网站
https://github.com/square/picasso
Fresco
一.优点
1.内存管理,三级缓存设计
2.图片预览,渐进式显示效果和多图请求
3.图片呈现效果,支持Gif、WebP格式
4.第一次加载和加载缓存速度都比较快
二.库的大小
3.5M左右
三.具体使用
1.导入依赖库
dependencies {
// 在 API < 14 上的机器支持 WebP 时,需要添加
compile 'com.facebook.fresco:animated-base-support:0.12.0'
// 支持 GIF 动图,需要添加
compile 'com.facebook.fresco:animated-gif:0.12.0'
// 支持 WebP (静态图+动图),需要添加
compile 'com.facebook.fresco:animated-webp:0.12.0'
compile 'com.facebook.fresco:webpsupport:0.12.0'
// 仅支持 WebP 静态图,需要添加
compile 'com.facebook.fresco:webpsupport:0.12.0'
}
2.简单使用
(1).Application内添加
[MyApplication.java]
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
(2).在布局文件中添加
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent">
(3).添加SimpleDraweeView
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="130dp"
android:layout_height="130dp"
fresco:placeholderImage="@drawable/my_drawable"/>
(4).加载图片
Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);
3.更强大的使用
(1).加载各种数据
(2).其他功能支持
4.封装工具类
https://github.com/CarGuo/FrescoUtils
四.github网站
https://github.com/facebook/fresco
总结:
根据大小分析:
Picasso < Glide < Fresco,如果你不使用特别复杂的功能的的情况下,使用Picasso完全是没有问题的。
根据功能分析:
Fresco > Glide > Picasso,如果项目中图片较多,功能比较复杂,可以使用Fresco。
根据方法数量分析:
Fresco > Glide > Picasso,因为Android中有64K限制,所以正常情况下没必要使用方法数量较多的。
根据流畅度分析:
Glide ≈ Fresco > Picasso,由于流畅度是一项很重要的指标,可以选择流畅度高的。