美文网首页Android开发学习
用Glide加载图片/gif时,图片自适应手机屏幕的宽高

用Glide加载图片/gif时,图片自适应手机屏幕的宽高

作者: 小小程序员jh | 来源:发表于2019-11-18 11:16 被阅读0次

    公司给的广告页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);
        }
    

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

    相关文章

      网友评论

        本文标题:用Glide加载图片/gif时,图片自适应手机屏幕的宽高

        本文链接:https://www.haomeiwen.com/subject/icpvictx.html