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