An image loading and caching library for Android focused on smooth scrolling
安卓上专注于平滑滑动的图片加载和缓存库。
Glide有以下特点:
导入Glide
//add glide
compile 'com.github.bumptech.glide:glide:3.8.0'
我们可以和picasso做比较,导入picasso:
//add picasso
compile 'com.squareup.picasso:picasso:2.5.1'
Picasso基本使用方法:
Picasso.with(context)
.load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into(imageView_00);
Glide基本使用方法:
Glide.with(context)
.load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into(imageView_01);
GlideApp
.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.into(myImageView);
with() :使Glide 的生命周期与当前对象绑定,可以是Activity Fragment Context等等。
load():可以加载一个本地图片,或者网络图片地址,也可以是Android工程的 内部Resource 图片资源。
into():将展示在ImageView 对象。
虽然两者看起来一样,但是Glide更易用,因为Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取。图片加载会和Activity/Fragment的生命周期保持一致.
Glide的默认Bitmap格式为RGB_565,但是如果你觉得难以接受,可以创建一个新的GlideModule将Bitmap格式转换到ARGB_8888:
import android.content.Context;
import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.load.DecodeFormat;
import com.bumptech.glide.module.GlideModule;
public class GlideConfiguration implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
// Apply options to the builder here.
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context, Glide glide) {
// register ModelLoaders here.
}
}
在AndroidManifest.xml中将GlideModule定义为meta-data:
"android.com.debugdemo.TestGlide.GlideConfiguration"
android:value="GlideModule"/>
可以得到如下效果图:
这个细小的效果差别,你感觉到了吗?
比如模糊效果:
import android.content.Context;
import android.graphics.Bitmap;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
public class BlurTransformation extends BitmapTransformation {
private RenderScript rs;
public BlurTransformation(Context context) {
super( context );
rs = RenderScript.create( context );
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
Bitmap blurredBitmap = toTransform.copy( Bitmap.Config.ARGB_8888, true );
// Allocate memory for Renderscript to work with
Allocation input = Allocation.createFromBitmap(
rs,
blurredBitmap,
Allocation.MipmapControl.MIPMAP_FULL,
Allocation.USAGE_SHARED
);
Allocation output = Allocation.createTyped(rs, input.getType());
// Load up an instance of the specific script that we want to use.
ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
script.setInput(input);
// Set the blur radius
script.setRadius(20);
// Start the ScriptIntrinisicBlur
script.forEach(output);
// Copy the output to the blurred bitmap
output.copyTo(blurredBitmap);
toTransform.recycle();
return blurredBitmap;
}
@Override
public String getId() {
return "blur";
}
}
imageView_03 = (ImageView) findViewById(R.id.imageView_03);
Glide.with(TestGlideDemo.this)
.load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
//.transform(new BlurTransformation(context))
.bitmapTransform( new BlurTransformation( context ) ) // this would work too!
.into(imageView_03);
music为应用中的gif动态图,/drawable/music.gif,我们加载此图片显示:
imageView_05 = (ImageView) findViewById(R.id.imageView_05);
Glide.with(context)
.load(R.drawable.music)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView_05);
1thumbnail(float sizeMultiplier)
请求给定系数的缩略图。如果缩略图比全尺寸图先加载完,就显示缩略图,否则就不显示。系数sizeMultiplier必须在(0,1)之间,可以递归调用该方法。
2.sizeMultiplier(float sizeMultiplier).
在加载资源之前给Target大小设置系数。
3.diskCacheStrategy(DiskCacheStrategy strategy).
设置缓存策略。
DiskCacheStrategy.SOURCE:缓存原始数据,DiskCacheStrategy.RESULT:缓存变换(如缩放、裁剪等)后的资源数据,DiskCacheStrategy.NONE:什么都不缓存
DiskCacheStrategy.ALL:缓存SOURC和RESULT。
默认采用DiskCacheStrategy.RESULT策略,对于download only操作要使用DiskCacheStrategy.SOURCE。
4.priority(Priority priority).
指定加载的优先级,优先级越高越优先加载,但不保证所有图片都按序加载。枚举Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL,Priority.LOW。
默认为Priority.NORMAL。
5.dontAnimate().
移除所有的动画。
6.animate(int animationId).
在异步加载资源完成时会执行该动画。
如:animate(android.R.anim.fade_out)
.animate( android.R.anim.slide_in_left ) // or R.anim.zoom_in
7.animate(ViewPropertyAnimation.Animator animator).
在异步加载资源完成时会执行该动画。
8.placeholder(int resourceId).
设置资源加载过程中的占位Drawable。
9.placeholder(Drawable drawable).
设置资源加载过程中的占位Drawable。
10.fallback(int resourceId).
设置model为空时要显示的Drawable。如果没设置fallback,model为空时将显示error的Drawable,如果error的Drawable也没设置,就显示placeholder的Drawable。
11.fallback(Drawable drawable).
设置model为空时显示的Drawable。
12.error(int resourceId).
设置load失败时显示的Drawable。
13.error(Drawable drawable).
设置load失败时显示的Drawable。
14.override(int width, int height).
重新设置Target的宽高值(单位为pixel)。
15.into(Y target).
设置资源将被加载到的Target。
16.into(ImageView view).
设置资源将被加载到的ImageView。取消该ImageView之前所有的加载并释放资源。
17.into(int width, int height).
后台线程加载时要加载资源的宽高值(单位为pixel)。
18.preload(int width, int height).
预加载resource到缓存中(单位为pixel)。
19.skipMemoryCache(boolean skip).
设置是否跳过内存缓存,但不保证一定不被缓存(比如请求已经在加载资源且没设置跳过内存缓存,这个资源就会被缓存在内存中)。
20.listener(RequestListener
1.清除内存缓存:
// 必须在UI线程中调用
Glide.get(context).clearMemory();
2.清除磁盘缓存:
// 必须在后台线程中调用,建议同时clearMemory()
Glide.get(applicationContext).clearDiskCache();
new Thread(new Runnable() {
@Override
public void run() {
Glide.get(context).clearDiskCache();
}
}).start();
3.禁止内存缓存:
.skipMemoryCache(true)
4.禁止磁盘缓存:
.diskCacheStrategy(DiskCacheStrategy.NONE)
5.指定资源的优先加载顺序:
//优先加载
Glide
.with(context)
.load(heroImageUrl)
.priority(Priority.HIGH)
.into(imageViewHero);
//后加载
Glide
.with(context)
.load(itemImageUrl)
.priority(Priority.LOW)
.into(imageViewItem);
6.先显示缩略图,再显示原图:
//用原图的1/10作为缩略图
Glide
.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.thumbnail(0.1f)
.into(iv_0);
//用其它图片作为缩略图
DrawableRequestBuilder 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);
7.对图片进行裁剪、模糊、滤镜等处理:
推荐使用独立的图片处理库:wasabeef/glide-transformations,使用也很简单:
compile 'jp.wasabeef:glide-transformations:2.0.0'
之后我们就可以使用GenericRequestBuilder或其子类的transform()或bitmapTransform()方法设置图片转换了:
//圆形裁剪
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.bitmapTransform(new CropCircleTransformation(this))
.into(iv_0);
//圆角处理
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.bitmapTransform(new RoundedCornersTransformation(this,30,0, RoundedCornersTransformation.CornerType.ALL))
.into(iv_0);
//灰度处理
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.bitmapTransform(new GrayscaleTransformation(this))
.into(iv_0);
//其它变换...
8.加载 View Animation
Glide.with(MainActivity.this)
.load(Images.urls[position])
.error(R.mipmap.ic_launcher)
.animate(R.anim.glide_slide_in_left_bounce
.centerCrop()
.into(holder.mImageView);
glide_slide_in_left_bounce.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000"
android:interpolator="@android:anim/bounce_interpolator">
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"/>
<translate android:fromXDelta="-100%p" android:toXDelta="0"/>
set>
9.加载 Property Animation
ViewPropertyAnimation.Animator animatorSet = new ViewPropertyAnimation.Animator() {
@Override
public void animate(View view) {
ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 0f, 1f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 0f, 1f);
ObjectAnimator rotation = ObjectAnimator.ofFloat(view, "rotation", 0f, 360f);
AnimatorSet set = new AnimatorSet();
set.playTogether(scaleX,scaleY,rotation);
set.setDuration(500);
set.start();
}
};
Glide.with(MainActivity.this)
.load(Images.urls[position])
.error(R.mipmap.ic_launcher)
.animate(animatorSet)
.centerCrop()
.into(holder.mImageView);
1.glide
https://github.com/bumptech/glide
2.Google推荐的图片加载库Glide介绍
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0327/2650.html
3.Glide(图片异步加载缓存库)的方法介绍
http://blog.csdn.net/github_36796968/article/details/53303673
4.Glide使用详解(一)
http://blog.csdn.net/shangmingchao/article/details/51125554
5.(源码分析)Glide(图片异步加载缓存库)的方法介绍
http://blog.csdn.net/u011733020/article/details/52319283
6.Android Glide 优化用户体验
http://blog.csdn.net/zwlove5280/article/details/53321778