Android動態(tài)獲取網(wǎng)絡(luò)圖片的寬高并縮放顯示

-- 先講下需求,網(wǎng)絡(luò)圖片未知寬高,可能超越整個屏幕,也可能很小,頁面圖片展示布局是其他控件的位置相減剩余的都是圖片所占用的大小,根據(jù)減去的剩余寬高來讓圖片正常顯示(看上去是縮放顯示差不多)。
網(wǎng)絡(luò)圖片實際大小直接顯示到手機(jī)上差不多就占滿屏幕了

顯示到手機(jī)上的樣子
第2部分圖片的高度是 屏幕的高度 - 1(標(biāo)題部分) -3(底部部分)得出來的剩余高度,這樣顯示出來看上去比較正常。--上代碼
//holder.ivBg  就是圖片的控件id,通過Glide獲取圖片的寬高;transform中的8是給圖片設(shè)置圓角
Glide.with(context).asBitmap() //強(qiáng)制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    //獲取標(biāo)題的高度
                                        var height1 = holder.ll1.height    //  ll1和ll2都是底部的布局,也就是圖中標(biāo)記的第3部分
                                        var height2 = holder.ll2.height    //同上注釋
                                        var screenHeight = DensityUtils.getScreenHeight(context)    //獲取手機(jī)高度的像素
                                        //下面代碼就是通過計算獲取圖片控件要占用的高度,58f是paddingTop和paddingBottom的總高,看UI設(shè)計圖具體多少就行
                                        var imageHeight = screenHeight - height1 - height2 - DensityUtils.dip2px(context, 58f) - titleHeight
                                        //獲取圖片控件要占用的寬度,60f也是paddingLeft和paddingRight的總和,實際看設(shè)計稿
                                        var lastWidth = screenWidth - DensityUtils.dip2px(context, 60f)
                                        frameLayout.width = lastWidth    //動態(tài)設(shè)置圖片要用的實際寬度
                                        frameLayout.height = imageHeight    //動態(tài)設(shè)置圖片要用的實際高度

                                        frameLayout.setMargins(DensityUtils.dip2px(context, 30f), 0, DensityUtils.dip2px(context, 30f), 0)
                                        holder.ivBg.layoutParams = frameLayout   //動態(tài)設(shè)置好寬高后告訴控件你要用的寬高
                                        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)
                            }
                        }
                    })
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容