Android动态获取网络图片的宽高并缩放显示

2021-06-06  本文已影响0人  光芒121
-- 先讲下需求,网络图片未知宽高,可能超越整个屏幕,也可能很小,页面图片展示布局是其他控件的位置相减剩余的都是图片所占用的大小,根据减去的剩余宽高来让图片正常显示(看上去是缩放显示差不多)。
网络图片实际大小直接显示到手机上差不多就占满屏幕了
显示到手机上的样子
第2部分图片的高度是 屏幕的高度 - 1(标题部分) -3(底部部分)得出来的剩余高度,这样显示出来看上去比较正常。--上代码
//holder.ivBg  就是图片的控件id,通过Glide获取图片的宽高;transform中的8是给图片设置圆角
Glide.with(context).asBitmap() //强制Glide返回一个Bitmap对象
                    .load(url).transform(GlideRoundTransform(context, 8)).into(object : SimpleTarget<Bitmap?>() {
                        override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap?>?) {
                            var frameLayout = holder.ivBg.layoutParams as LinearLayout.LayoutParams
                            var screenWidth = DensityUtils.getScreenWidth(context)
                            val width = resource.width    //获取图片的实际宽度
                            val height = resource.height    //获取图片的实际高度
                            if (height > width) {   //图片竖屏
                                holder.ll1.post(object : Runnable {    // ll1是底部的控件
                                    override fun run() {
                                        var titleHeight = llTop.height    //获取标题的高度
                                        var height1 = holder.ll1.height    //  ll1和ll2都是底部的布局,也就是图中标记的第3部分
                                        var height2 = holder.ll2.height    //同上注释
                                        var screenHeight = DensityUtils.getScreenHeight(context)    //获取手机高度的像素
                                        //下面代码就是通过计算获取图片控件要占用的高度,58f是paddingTop和paddingBottom的总高,看UI设计图具体多少就行
                                        var imageHeight = screenHeight - height1 - height2 - DensityUtils.dip2px(context, 58f) - titleHeight
                                        //获取图片控件要占用的宽度,60f也是paddingLeft和paddingRight的总和,实际看设计稿
                                        var lastWidth = screenWidth - DensityUtils.dip2px(context, 60f)
                                        frameLayout.width = lastWidth    //动态设置图片要用的实际宽度
                                        frameLayout.height = imageHeight    //动态设置图片要用的实际高度

                                        frameLayout.setMargins(DensityUtils.dip2px(context, 30f), 0, DensityUtils.dip2px(context, 30f), 0)
                                        holder.ivBg.layoutParams = frameLayout   //动态设置好宽高后告诉控件你要用的宽高
                                        holder.ivBg.measure(lastWidth, imageHeight)    //最后重新计算下宽高并显示
                                        holder.ivBg.setImageBitmap(resource)
                                    }
                                })
                            } else { //横屏
                                frameLayout.setMargins(DensityUtils.dip2px(context, 20f), 0, DensityUtils.dip2px(context, 20f), 0)
                                var lastWidth = width - DensityUtils.dip2px(context, 40f)
                                frameLayout.width = lastWidth
                                frameLayout.height = height

                                holder.ivBg.layoutParams = frameLayout
                                holder.ivBg.measure(lastWidth, height)
                                holder.ivBg.setImageBitmap(resource)
                            }
                        }
                    })
上一篇 下一篇

猜你喜欢

热点阅读