参考的网址: http://www.jianshu.com/p/3ac30878c72c 总述
参考的网址: http://www.open-open.com/lib/view/open1455270373667.html picasso
参考的网址: http://blog.csdn.net/shangmingchao/article/details/51125554 glide
Imageloader .一直很强大,使用很普遍,但是唯一缺陷,作者不维护了。不过依然好用,教程 网上巨多
picasso Square出品 一句话搞定项目中的图片加载
在Picasso当中,如果OKHttp可以使用的话,就会默认使用OKHttp,如果无法使用的话,就会使用UrlConnectionDownloader(默认使用HttpURLConnection实现)
- 处理Adapter中的 ImageView 回收和取消已经回收ImageView的下载进程
- 使用最少的内存完成复杂的图片转换,比如把下载的图片转换为圆角等
- 自动添加磁盘和内存缓存
使用方法:
1.添加依赖
compile 'com.squareup.picasso:picasso:2.5.2'
2.使用方法
/**
* 根据ImageView大小,显示图片
* .fit() 说明:控件不能设置成wrap_content,也就是必须有大小才行,fit()才让图片的宽高等于控件的宽高,设置fit(),不能再调用resize()
* .placeholder(R.drawable.topic_tom) 说明:当图片没有加载上的时候,显示的图片
* .error(R.drawable.topic_sky) 说明:当图片加载错误的时候,显示图片
* .into(img_one) 说明:将图片加载到哪个控件中
*/
Picasso.with(this).load("http://g.hiphotos.baidu.com/image/pic/item/c9fcc3cec3fdfc03e426845ed03f8794a5c226fd.jpg")
.fit()
.placeholder(R.drawable.topic_tom)
.error(R.drawable.topic_sky)
.into(img_one);
/**
* 通过程序代码,来显示图片大小
*.resize(200, 150) 说明:为图片重新定义大小
*.centerCrop() 说明:图片要填充整个控件,去两边留中间
*/
Picasso.with(this).load("http://d.hiphotos.baidu.com/image/h%3D200/sign=745574b6a2ec08fa390014a769ee3d4d/cb8065380cd79123148b447daf345982b2b78054.jpg")
.resize(200, 150)
.centerCrop()
.placeholder(R.drawable.topic_tom)
.error(R.drawable.topic_sky)
.into(img_two);
/**
* 加载本地数据库,图片的大小,取消于控件设置的大小
*/
Picasso.with(this).load(R.drawable.topic_tom)
.into(img_three);
/**
* 截取图片
* .transform(new CropSquareTransformation()) 说明:通过程序截取图片
*/
Picasso.with(this).load("http://g.hiphotos.baidu.com/image/pic/item/6c224f4a20a446230761b9b79c22720e0df3d7bf.jpg")
.transform(new CropSquareTransformation())
.placeholder(R.drawable.topic_tom)
.error(R.drawable.topic_sky)
.into(img_four);
她的内存缓存 如果不设置,就是原本的大小,实现三级缓存,实现加载中,加载后,加载失败(失败3次显示)图片,不用担心oom 不用担心list滑动出错
glide使用 ,她是对pissaio的封装拓展,包大了500k 更好的流畅性
picasso不做设置就只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格
Glide 支持加载 Gif 动态图,而 Picasso 不支持该特性
gilde可以指定优先下载资源,下载后先展示缩略图等。
可以和指定的context周期一起
1.依赖
compile 'com.github.bumptech.glide:glide:3.7.0'
2权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3Glide的网络请求部分可以使用当前最流行的网络请求框架Volley或OkHttp,也可以通过Glide的ModelLoader接口自己写网络请求。
Glide默认使用
HttpUrlConnection
进行网络请求,为了让APP保持一致的网络请求形式,可以让Glide使用我们指定的网络请求形式请求网络资源,这里我们选
OkHttp (
//OkHttp 2.x
//compile 'com.github.bumptech.glide:okhttp-integration:1.4.0@aar'
//compile 'com.squareup.okhttp:okhttp:2.7.5'
//OkHttp 3.x
compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
4.简单使用
Glide
.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.into(imageView);
- with(Context context). 使用Application上下文,Glide请求将不受Activity/Fragment生命周期控制。
- with(Activity activity).使用Activity作为上下文,Glide的请求会受到Activity生命周期控制。
- with(FragmentActivity activity).Glide的请求会受到FragmentActivity生命周期控制。
- with(android.app.Fragment fragment).Glide的请求会受到Fragment 生命周期控制。
- with(android.support.v4.app.Fragment fragment).Glide的请求会受到Fragment生命周期控制。
load SD卡资源:load("file://"+ Environment.getExternalStorageDirectory().getPath()+"/test.jpg")
load assets资源:load("file:///android_asset/f003.gif")
load raw资源:load("android.resource://com.frank.glide/raw/raw_1")或load("android.resource://com.frank.glide/raw/"+R.raw.raw_1)
load drawable资源:load("android.resource://com.frank.glide/drawable/news")或load("android.resource://com.frank.glide/drawable/"+R.drawable.news)
load ContentProvider资源:load("content://media/external/images/media/139469")
load http资源:load(" https://img-my.csdn.net/uploads/201508/05/1438760757_3588.jpg")
load https资源:load(" https://img.alicdn.com/tps/TB1uyhoMpXXXXcLXVXXXXXXXXXX-476-538.jpg_240x5000q50.jpg_.webp")
当然,load不限于String类型,还可以:
load(Uri uri)
,load(File file)
,load(Integer resourceId)
,load(URL url)
,load(byte[] model)
,load(T model)
,loadFromMediaStore(Uri uri)
。
-
禁止内存缓存:
.skipMemoryCache(true)
-
清除内存缓存:
// 必须在UI线程中调用 Glide.get(context).clearMemory();
-
禁止磁盘缓存:
.diskCacheStrategy(DiskCacheStrategy.NONE)
-
清除磁盘缓存:
// 必须在后台线程中调用,建议同时clearMemory() Glide.get(applicationContext).clearDiskCache();
-
指定资源的优先加载顺序:
//优先加载 Glide .with(context) .load(heroImageUrl) .priority(Priority.HIGH) .into(imageViewHero); //后加载 Glide .with(context) .load(itemImageUrl) .priority(Priority.LOW) .into(imageViewItem);
-
先显示缩略图,再显示原图:
//用原图的1/10作为缩略图 Glide .with(this) .load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png") .thumbnail(0.1f) .into(iv_0); //用其它图片作为缩略图 DrawableRequestBuilder<Integer> thumbnailRequest = Glide .with(this) .load(R.drawable.news); Glide.with(this) .load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png") .thumbnail(thumbnailRequest) .into(iv_0);