Picasso :和Square的网络库一起能发挥最大作用,因为Picasso可以选择将网络请求的缓存部分交给了okhttp实现。
Glide:模仿了Picasso的API,而且在他的基础上加了很多的扩展(比如gif等支持),
Glide默认的Bitmap格式是RGB_565,比
Picasso默认的ARGB_8888格式的内存开销要小一半;Picasso缓存的是全尺寸的(只缓存一种),而Glide缓存的是跟ImageView尺寸相同的(即56*56和128*128是两个缓存) 。
FB的图片加载框架Fresco:最大的优势在于5.0以下(最低2.3)的bitmap加载。在5.0以下系统,Fresco将图片放到一个特别的内存区域(Ashmem区)。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。为什么说是5.0以下,因为在5.0以后系统默认就是存储在Ashmem区了。
Picasso所能实现的功能,Glide都能做,无非是所需的设置不同。但是Picasso体积比起Glide小太多如果项目中网络请求本身用的就是okhttp或者retrofit(本质还是okhttp),那么建议用Picasso,体积会小很多(Square全家桶的干活)。Glide的好处是大型的图片流,比如gif、Video,如果你们是做美拍、爱拍这种视频类应用,建议使用。
Fresco在5.0以下的内存优化非常好,代价就是体积也非常的大,按体积算Fresco>Glide>Picasso
不过在使用起来也有些不便(小建议:他只能用内置的一个ImageView来实现这些功能,用起来比较麻烦,我们通常是根据Fresco自己改改,直接使用他的Bitmap层)
github地址:
https://github.com/square/picasso
Button imagebtn;
ImageView imagev;
imagebtn = findViewById(R.id.getimage);
imagev = findViewById(R.id.imagev);
imagebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String Url = "http://img.taopic.com/uploads/allimg/140714/234975-140G4155Z571.jp";
//1./从网络下载图片显示
Picasso
.with(getApplicationContext())
.load(Url)
.into(imagev);
//2.从网络下载图片设置大小
Picasso.with(getApplicationContext())
.load(Url)
//裁剪图片尺寸
.resize(100, 100)
//设置图片圆角
.centerCrop()
.into(imagev);
//3.从网络下载图片并显示,如果没有网络图片,则显示占位的图片
Picasso.with(getApplicationContext())
.load(Url)
//加载过程中的图片显示
.placeholder(R.drawable.ic_launcher_background)
//加载失败中的图片显示
//如果重试3次(下载源代码可以根据需要修改)还是无法成功加载图片,则用错误占位符图片显示。
.error(R.drawable.ic_launcher_foreground)
.into(imagev);
// 4. 加载本地的资源或者架子本地的文件
//加载应用中的资源文件
Picasso.with(getApplicationContext()).load(R.drawable.ic_launcher_background).into(imagev);
//加载本地文件
Picasso.with(getApplicationContext()).load(new File("/images/tet.gif")).into(imagev);
}
});
=======
Glide
github地址:
https://github.com/bumptech/glide
使用参考:https://www.jianshu.com/p/75aa0e4cd33f
需要添加权限:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/>
changgeimage = findViewById(R.id.chageimage);
imagev = findViewById(R.id.imagv);
changgeimage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//*************加载网络图片
String imageUrl = "http://img05.tooopen.com/images/20150820/tooopen_sy_139205349641.jpg";
// Glide.with(getApplicationContext())
// .load(imageUrl)
// .into(imagev);
//***************当加载网络图片时,由于加载过程中图片未能及时显示,此时可能需要设置等待时的图片,通过placeHolder()方法
// Glide.with(getApplicationContext()).load(imageUrl).placeholder(R.mipmap.first_newx).into(imagev);
// **********当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示:
// Glide.with(getApplicationContext()).load(imageUrl).error(R.mipmap.ic_launcher).into(imagev);
// ************图片的缩放,centerCrop()和fitCenter()
// 1)使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView的Height是match_parent则图片就会被拉伸填充,等比例缩放图片,直到图片的狂高都大于等于ImageView的宽度,然后截取中间的显示。
// Glide.with(getApplicationContext()).load(imageUrl).centerCrop().into(imagev);
// 2)使用fitCenter即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围,该图像将会完全显示,但可能不会填满整个ImageView。等比例缩放图片,宽或者是高等于ImageView的宽或者是高。
// Glide.with(getApplicationContext()).load(imageUrl).fitCenter().into(imagev);
// ***********显示gif动画,asGif()判断是否是gif动画
// Glide.with(getApplicationContext()).load(imageUrl).asGif().into(imagev);
//
//// 加载GIF和视频文件
//
// //************Fresco支持加载GIF,并且使用的方式和加载图片一样:
//
// String gifUrl = "http://xx.gif";
// Glide.with( getApplicationContext() )
// .load( gifUrl )
// .asGif()
// .error(R.mipmap.first_newx )
// .into( imagev );
//
// //******** Glide可以加载视频的缩略图:
//
// String filePath = "xx.mp4";
//
// Glide.with( getApplicationContext() )
// .load( Uri.fromFile( new File( filePath ) ) )
// .into( imagev );
//
// *********.缓存策略
//
// Glide.with( getApplicationContext() ).load(imageUrl).skipMemoryCache(true).into(imageViewInternet );//跳过内存缓存
// Glide.with( getApplicationContext() ).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.NONE).into( imageViewInternet );//跳过硬盘缓存
// DiskCacheStrategy.NONE 什么都不缓存
// DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像
// DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的)
// DiskCacheStrategy.ALL 缓存所有版本的图像(默认行为)
// **********.优先级,设置图片加载的顺序:
// Glide.with(getApplicationContext()).load(imageUrl).priority( Priority.HIGH).into( imagev);
// //**********加载本地图片,重新设置图片大小
// Glide.with(getApplicationContext())
// .load(R.mipmap.first_newx)
// .override(300, 300)
// .into(imagev);
//****************** 从文件中加载图片
// File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "first_newx.png");
//
// Glide
// .with(getApplicationContext())
// .load(file)
// .into(imagev);
// //******************* 从URI中加载图片
//
// Uri uri = resourceIdToUri(getApplicationContext(), R.mipmap.first_newx);
//
// Glide
// .with(getApplicationContext())
// .load(uri)
// .into(imagev);
//***************** Glide获取Bitmap,Glide通过Target的回调获取Bitmap,最常用的是SimpleTarget:
//
// private SimpleTarget target = new SimpleTarget<Bitmap>() {
// @Override
// public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) {
// // do something with the bitmap
// // for demonstration purposes, let's just set it to an ImageView
// imagev.setImageBitmap( bitmap );
// }
// };
//
// private void loadImageSimpleTarget() {
// Glide
// .with( getApplicationContext() ) // could be an issue!
// .load( imageurl )
// .asBitmap()
// .into( target );
// }
// ********** 设置Bitmap的大小:
//
// private SimpleTarget target2 = new SimpleTarget<Bitmap>( 250, 250 ) {
// @Override
// public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) {
// imagev.setImageBitmap( bitmap );
// }
// };
//
// private void loadImageSimpleTargetApplicationContext() {
// Glide
// .with( context.getApplicationContext() )
// .load( imageurl )
// .asBitmap()
// .into( target2 );
// }
}
});
========
Fresco
github地址:
https://github.com/facebook/fresco
==========SmartImageView
吧com包直接拷贝到工程中;在xml布局中要使用完整的名字:连文件夹的名字也要带上
SmartImageView sm=(SmartImageView)findViewById();
sm.setImageUrl(imageUrl);//参数是一个图片地址url
==============afinal下载网络图片并加载显示;