Android开发学习

用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);
    }

以上就是本次更新的内容,如果有问题,可以提出来,一起学习进步!

上一篇下一篇

猜你喜欢

热点阅读