用Glide加载图片/gif时,图片自适应手机屏幕的宽高
2019-11-18 本文已影响0人
小小程序员jh
公司给的广告页gif图大小尺寸有差异,导致手机屏幕宽高显示出现宽高不能占满,于是也是网上找文章,每次都要找,这里整理下。
xml布局就是一个imageView
, 放在了 FrameLayout
里面,
ImageView是这样配置下:
<ImageView
android:id="@+id/iv_welcome"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/bg_launch"/>
java方法如下:
/**
* Glide加载gif, 占满宽高
* @param context
* @param imageUrl
* @param imageView
*/
public static void loadGifFixXY(Context context, String imageUrl, final ImageView imageView) {
//glide是在listener()方法中传入一个RequestListener来设置当图片资源准备好了以后自定义的操作的。
Glide.with(context).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> 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.setLayoutParams(new FrameLayout.LayoutParams(ScreenUtils.getScreenWidth(),
(ScreenUtils.getScreenHeight())));
Logger.d("ScreenWidth: " + ScreenUtils.getScreenWidth());
Logger.d("ScreenHeight: " + ScreenUtils.getScreenHeight());
imageView.setBackground(resource);
return false;
}
})
// .placeholder(R.drawable.bg_launch)
// .error(R.drawable.bg_launch)
.into(imageView);
}
其中ScreenUtils
是引用的一个资源库: Android开发人员不得不收集的代码, 这个还是挺不错的!
参考文章:
原作者文章格式不太友好,这里简单做了下调整:
/**
* Glide加载gif, 占满宽高
* @param context
* @param imageUrl
* @param imageView
*/
public static void loadGifFixXY(Context context, String imageUrl, final ImageView imageView) {
//我这里是先获取屏幕的宽高,然后把屏幕的宽设为imageView的宽。
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();
ViewGroup.LayoutParams params = imageView.getLayoutParams();
params.width = width;
params.height = height;
imageView.setLayoutParams(params);
//glide是在listener()方法中传入一个RequestListener来设置当图片资源准备好了以后自定义的操作的。
Glide.with(context).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> 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;
}
})
.placeholder(R.drawable.bg_launch)
.error(R.drawable.bg_launch)
.into(imageView);
}
以上就是本次更新的内容,如果有问题,可以提出来,一起学习进步!