-- 先講下需求撵颊,網(wǎng)絡(luò)圖片未知寬高宇攻,可能超越整個(gè)屏幕,也可能很小倡勇,頁面圖片展示布局是其他控件的位置相減剩余的都是圖片所占用的大小逞刷,根據(jù)減去的剩余寬高來讓圖片正常顯示(看上去是縮放顯示差不多)。
網(wǎng)絡(luò)圖片實(shí)際大小直接顯示到手機(jī)上差不多就占滿屏幕了
第2部分圖片的高度是 屏幕的高度 - 1(標(biāo)題部分) -3(底部部分)得出來的剩余高度妻熊,這樣顯示出來看上去比較正常夸浅。--上代碼
//holder.ivBg 就是圖片的控件id,通過Glide獲取圖片的寬高固耘;transform中的8是給圖片設(shè)置圓角
Glide.with(context).asBitmap() //強(qiáng)制Glide返回一個(gè)Bitmap對(duì)象
.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 //獲取圖片的實(shí)際寬度
val height = resource.height //獲取圖片的實(shí)際高度
if (height > width) { //圖片豎屏
holder.ll1.post(object : Runnable { // ll1是底部的控件
override fun run() {
var titleHeight = llTop.height //獲取標(biāo)題的高度
var height1 = holder.ll1.height // ll1和ll2都是底部的布局题篷,也就是圖中標(biāo)記的第3部分
var height2 = holder.ll2.height //同上注釋
var screenHeight = DensityUtils.getScreenHeight(context) //獲取手機(jī)高度的像素
//下面代碼就是通過計(jì)算獲取圖片控件要占用的高度,58f是paddingTop和paddingBottom的總高厅目,看UI設(shè)計(jì)圖具體多少就行
var imageHeight = screenHeight - height1 - height2 - DensityUtils.dip2px(context, 58f) - titleHeight
//獲取圖片控件要占用的寬度番枚,60f也是paddingLeft和paddingRight的總和法严,實(shí)際看設(shè)計(jì)稿
var lastWidth = screenWidth - DensityUtils.dip2px(context, 60f)
frameLayout.width = lastWidth //動(dòng)態(tài)設(shè)置圖片要用的實(shí)際寬度
frameLayout.height = imageHeight //動(dòng)態(tài)設(shè)置圖片要用的實(shí)際高度
frameLayout.setMargins(DensityUtils.dip2px(context, 30f), 0, DensityUtils.dip2px(context, 30f), 0)
holder.ivBg.layoutParams = frameLayout //動(dòng)態(tài)設(shè)置好寬高后告訴控件你要用的寬高
holder.ivBg.measure(lastWidth, imageHeight) //最后重新計(jì)算下寬高并顯示
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)
}
}
})