TextView加载Html文本显示图片问题

本文介绍了一种使用Kotlin编写的图片异步加载及根据视图宽度自适应缩放的方法,确保图片不会超出视图宽度,同时保持图片原始比例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最优实现方案,异步加载图片本人使用ImageLoader,各位也可以使用其他工具加载获得Bitmap类型图片
图片超出view显示宽度时缩放到view显示宽度,否则显示图片在手机中的实际大小


代码——使用kotlin编写
skuDetailsIntroTv.movementMethod = LinkMovementMethod.getInstance()  //设置连接可点击跳转
skuDetailsIntroTv.text = Html.fromHtml(sku.getViewProdIntro(), Html.ImageGetter { source ->
    val drawable = LevelListDrawable()
    ImageLoader.getInstance().loadImage(source, object : ImageLoadingListener {
        override fun onLoadingComplete(imageUri: String?, view: View?, result: Bitmap?) {
            if (result != null) {
                val bitmapDrawable = BitmapDrawable(resources, result)
                //添加一层bitmap
                drawable.addLevel(1, 1, bitmapDrawable)

                //根据手机像素密度重新计算
                val scale = resources.displayMetrics.density
                val bitmapWidth = Math.round(result.width * scale)
                val bitmapHeight = Math.round(result.height * scale)

                //防止图片超出view显示区域宽度
                val viewContentWidth = skuDetailsIntroTv.width - skuDetailsIntroTv.paddingLeft -
                        skuDetailsIntroTv.paddingRight
                val width = if (viewContentWidth < bitmapWidth) viewContentWidth else bitmapWidth
                //等比例缩放
                val height = bitmapHeight * width / bitmapWidth
                drawable.setBounds(0, 0, width, height)
                drawable.level = 1

                //异步加载的drawable需要重新加载,invalidate()无效果,暂时的解决方案
                val text = skuDetailsIntroTv.text
                skuDetailsIntroTv.text = text
                skuDetailsIntroTv.refreshDrawableState()
            }
        }

        override fun onLoadingStarted(imageUri: String?, view: View?) {
        }

        override fun onLoadingCancelled(imageUri: String?, view: View?) {
        }

        override fun onLoadingFailed(imageUri: String?, view: View?, failReason: FailReason?) {
        }
    })
    drawable
}, null)

效果图片展示

这里写图片描述


html测试数据——图片url域名做了*处理
<p>
    <span style="font-size:14px;">asdfasfdasdfasfda</span> 
</p>
<p>
    <strong><em><u><span style="color:#E56600;">asfdaslkasfd舒服舒服</span></u></em></strong> 
</p>
<p>
    lasfsajfdasfdk!@$%!@$#!@$
</p>
<p>
    <span style="font-size:24px;background-color:#FFE500;"><strong><u>文本输入</u></strong></span> 
</p>
<p>
    文本输入
</p>
<p>
    本文本
</p>
<p>
    &nbsp;
</p>
<p>
    <img src="http://test.******.com:6080/hca/api/business/getfile/Z3JvdXAxL00wMC8wMC8xQy93S2hRVzFvb3BSV0FkTGJkQUFBdXRRR2dBNjA3MzY5MDY4"/>
</p>

stackoverflow参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值