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

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

作者: 光芒121 | 来源:发表于2021-06-06 09:59 被阅读0次
    -- 先讲下需求,网络图片未知宽高,可能超越整个屏幕,也可能很小,页面图片展示布局是其他控件的位置相减剩余的都是图片所占用的大小,根据减去的剩余宽高来让图片正常显示(看上去是缩放显示差不多)。
    网络图片实际大小直接显示到手机上差不多就占满屏幕了
    显示到手机上的样子
    第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)
                                }
                            }
                        })
    

    相关文章

      网友评论

          本文标题:Android动态获取网络图片的宽高并缩放显示

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