前言:
ui'给的切图是个gif,但是用Glide加载到ImageView的时候会出现不能铺满屏幕的尴尬情况,下面就用这个方法加载gif。
步骤:逻辑很简单,就是获取gif的宽高动态的给到iv宽高就可以
/**
* Glide加载gif, 占满宽高
*
* @param context
* @param imageView
*/
public static void loadGifFixXY(Context context, final ImageView imageView) {
//glide是在listener()方法中传入一个RequestListener来设置当图片资源准备好了以后自定义的操作的。
Glide.with(context).asGif().load(R.drawable.manhole_cover).diskCacheStrategy(DiskCacheStrategy.NONE)
.listener(new RequestListener<GifDrawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
//首先设置imageView的ScaleType属性为ScaleType.FIT_XY,让图片不按比例缩放,把图片塞满整个View。
if (imageView.getScaleType() != ImageView.ScaleType.FIT_XY) {
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
}
// 得到当前imageView的宽度(我设置的是屏幕宽度),获取到imageView与图片宽的比例,然后通过这个比例去设置imageView的高
ViewGroup.LayoutParams params = imageView.getLayoutParams();
int vw = imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight();
float scale = (float) vw / (float) resource.getIntrinsicWidth();
int vh = Math.round(resource.getIntrinsicHeight() * scale);
params.height = vh + imageView.getPaddingTop() + imageView.getPaddingBottom();
imageView.setLayoutParams(params);
return false;
}
})
.error(R.drawable.ic_launcher_background)
.into(imageView);
}