1、依赖添加
implementation group: 'com.github.bumptech.glide', name: 'glide', version: '4.11.0'
2、加载网络图片
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); String url = "http://www.qq745.com/uploads/allimg/141106/1-141106153Q5.png" ; ImageView targetView = (ImageView) findViewById(R.id.iv_target); Glide.with( this ). load(url). asBitmap(). //强制处理为bitmap into(targetView); //显示到目标View中 } }
3、加载资源图片
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); int resourceId = R.drawable.test; ImageView targetView = (ImageView) findViewById(R.id.iv_target); Glide.with( this ). load(resourceId). asBitmap(). into(targetView); } }
4、加载本地文件图片
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); File file = new File(Environment.getExternalStorageDirectory(), "test.jpg" ); ImageView targetView = (ImageView) findViewById(R.id.iv_target); Glide.with( this ). load(file). asBitmap(). into(targetView); } }
5、从Uri中加载
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); Uri uri = Uri.parse( "android.resource://" + this .getPackageName() + "/" + R.drawable.test); ImageView targetView = (ImageView) findViewById(R.id.iv_target); Glide.with( this ). load(uri). asBitmap(). into(targetView); } }
6、加载gif图片
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); ImageView targetView = (ImageView) findViewById(R.id.iv_target); Glide.with( this ). load(R.drawable.smail). asGif(). //注意:这里显示的指明了要加载的是gif图片,当然即使不指明,glide也会自己判断. into(targetView); } }
7、设置默认图片和加载失败时显示的图片
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); ImageView targetView = (ImageView) findViewById(R.id.iv_target); Glide.with( this ). load(R.drawable.test). asBitmap(). placeholder(R.drawable.bg_loading). //加载中显示的图片 error(R.drawable.bg_error). //加载失败时显示的图片 into(targetView); } }
8、淡入显示效果
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); ImageView targetView = (ImageView) findViewById(R.id.iv_target); Glide.with( this ). load(R.drawable.test). placeholder(R.drawable.bg_loading). //加载中显示的图片 error(R.drawable.bg_error). //加载失败时显示的图片 crossFade(). //淡入显示,注意:如果设置了这个,则必须要去掉asBitmap into(targetView); } }
另外,crossFade还可以接收一个参数来设置淡入显示效果的持续时间,crossFade(int duration);如果你想直接显示图片,而不是淡入显示图片,则可以通过dontAnimate()方法设置.
9、调整图片像素大小
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); ImageView targetView = (ImageView) findViewById(R.id.iv_target); Glide.with( this ). load(R.drawable.test). placeholder(R.drawable.bg_loading). //加载中显示的图片 error(R.drawable.bg_error). //加载失败时显示的图片 crossFade( 1000 ). //淡入显示的时间,注意:如果设置了这个,则必须要去掉asBitmap override( 80 , 80 ). //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高 into(targetView); } }
10、设置CenterCrop,FitCenter
CenterCrop,FitCenter都是对目标图片进行裁剪,了解过ImageView的ScaleType属性就知道,这2种裁剪方式在ImageView上也是有的,分别对应ImageView的ImageView.ScaleType.CENTER_CROP和mageView.ScaleType.FIT_CENTER的.
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); ImageView targetView = (ImageView) findViewById(R.id.iv_target); targetView.setScaleType(ImageView.ScaleType.FIT_CENTER); Glide.with( this ). load(R.drawable.test). placeholder(R.drawable.bg_loading). //加载中显示的图片 error(R.drawable.bg_error). //加载失败时显示的图片 crossFade( 1000 ). //淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap override( 80 , 80 ). //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高 centerCrop(). //中心裁剪,缩放填充至整个ImageView into(targetView); } }
11、缓存策略设置
内存缓存设置,通过skipMemoryCache(boolean)来设置是否需要缓存到内存,默认是会缓存到内存的.
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); ImageView targetView = (ImageView) findViewById(R.id.iv_target); targetView.setScaleType(ImageView.ScaleType.FIT_CENTER); Glide.with( this ). load(R.drawable.test). placeholder(R.drawable.bg_loading). //加载中显示的图片 error(R.drawable.bg_error). //加载失败时显示的图片 crossFade( 1000 ). //淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap override( 80 , 80 ). //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高 centerCrop(). //中心裁剪,缩放填充至整个ImageView skipMemoryCache( true ). //跳过内存缓存 into(targetView); } }
磁盘缓存,磁盘缓存通过diskCacheStrategy(DiskCacheStrategy)来设置,DiskCacheStrategy一共有4种模式:
- DiskCacheStrategy.NONE:什么都不缓存
- DiskCacheStrategy.SOURCE:仅缓存原图(全分辨率的图片)
- DiskCacheStrategy.RESULT:仅缓存最终的图片,即修改了尺寸或者转换后的图片
- DiskCacheStrategy.ALL:缓存所有版本的图片,默认模式
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); ImageView targetView = (ImageView) findViewById(R.id.iv_target); targetView.setScaleType(ImageView.ScaleType.FIT_CENTER); Glide.with( this ). load(R.drawable.test). placeholder(R.drawable.bg_loading). //加载中显示的图片 error(R.drawable.bg_error). //加载失败时显示的图片 crossFade( 1000 ). //淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap override( 80 , 80 ). //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高 centerCrop(). //中心裁剪,缩放填充至整个ImageView skipMemoryCache( true ). //跳过内存缓存 diskCacheStrategy(DiskCacheStrategy.RESULT). //保存最终图片 into(targetView); } }
12、设置图片请求的优先级
Glide 可以用 Priority 枚举来设置图片的加载优先级,这样我们就可以针对那些需要显示的图片设置高的优先级了.
Priority 有4种级别:
- Priority.LOW
- Priority.NORMAL
- Priority.HIGH
- Priority.IMMEDIATE
public static void loadImageWithHighPriority(Object url,ImageView imageView, final LoaderListener listener) { if (url == null ) { if (listener != null ) { listener.onError(); } } else { Glide.with(imageView.getContext()). load(url). asBitmap(). priority(Priority.HIGH). //高优先级 dontAnimate(). listener( new RequestListener<Object, Bitmap>() { @Override public boolean onException(Exception e, Object model, Target<Bitmap> target, boolean isFirstResource) { if ( null != listener) { listener.onError(); } return false ; } @Override public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) { if ( null != listener) { listener.onSuccess(); } return false ; } }).into(imageView); } }
13、设置加载缩略图
通过设置缩略图,我们可以在显示目标图片之前先展示一个第分辨率或者其他图片,当全分辨率的目标图片在后台加载完成后,
Glide会自动切换显示全像素的目标图片.
设置缩略图有2种方式:
通过thumbnail(float)指定0.0f~1.0f的原始图像大小,例如全像素的大小是500*500,如果设置为thumbnail为0.1f,即目标图片的10%,显示的缩略图大小就是50*50;
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); ImageView targetView = (ImageView) findViewById(R.id.iv_target); Glide.with( this ). load(R.drawable.test). placeholder(R.drawable.bg_loading). //加载中显示的图片 error(R.drawable.bg_error). //加载失败时显示的图片 crossFade( 1000 ). //淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap override( 80 , 80 ). //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高 centerCrop(). //中心裁剪,缩放填充至整个ImageView skipMemoryCache( true ). //跳过内存缓存 diskCacheStrategy(DiskCacheStrategy.RESULT). //保存最终图片 thumbnail( 0 .1f). //10%的原图大小 into(targetView); } }
通过thumbnail(DrawableRequestBuilder)方式来指定缩略图,该缩略图可以使用load的所有方式(网络,文件,uri,资源)加载.
public class TestGlideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_test); ImageView targetView = (ImageView) findViewById(R.id.iv_target); //缩略图请求 DrawableRequestBuilder<String> thumbnailRequest = Glide .with( this ) .load( "http://www.qq745.com/uploads/allimg/141106/1-141106153Q5.png" ); Glide.with( this ). load(R.drawable.test). // placeholder(R.drawable.bg_loading).//加载中显示的图片 // error(R.drawable.bg_error).//加载失败时显示的图片 // crossFade(1000).//淡入淡出,注意:如果设置了这个,则必须要去掉asBitmap override( 80 , 80 ). //设置最终显示的图片像素为80*80,注意:这个是像素,而不是控件的宽高 centerCrop(). //中心裁剪,缩放填充至整个ImageView skipMemoryCache( true ). //跳过内存缓存 diskCacheStrategy(DiskCacheStrategy.RESULT). //保存最终图片 thumbnail(thumbnailRequest). //设置缩略图 into(targetView); }
14、圆角
RequestOptions options = new RequestOptions().error(R.drawable.img_load_failure).bitmapTransform(new RoundedCorners(30));//图片圆角为30 Glide.with(this).load(URL) //图片地址 .apply(options) .into(ImagView);