Jetpack Compose 实用指南 - .9图与launchEffect与添加/编辑/复用原生AndroidView

开头感谢我的粉丝头子 (这位同学拒绝提供博客地址)提供的水群话题
不多说废话,直接进入正题

Compose中显示.9图

现在有.9图如下——
.9图示意

总所周知,compose中加载图片用Image()
image 的第一个参数:painter,
大家一般用自带的,或者官方推荐的coil

当前文章使用的两者API版本分别为compose 1.2.0-alpha02coil-compose:1.4.0

于是我们加载图片试试
  • 前者使用painterResource(),会报错——

java.lang.IllegalArgumentException: Only VectorDrawables and rasterized asset types are supported ex. PNG, JPG

简直是滑天下之大稽!我这个图是不是png我自己心里没点数?

  • 后者使用rememberImagePainter()倒是能够加载图片出来,来,我们一步步试试看。

    • 首先,很自然的一个想法:coil库支持直接填入类型为int的ResIdDrawable,我们直接——
Image(
		rememberImagePainter(R.drawable.xxx), //
						"testFor.9",
                     	Modifier.size(300.dp, 50.dp),
                       	contentScale = ContentScale.FillBounds //拉伸图片以填充
               )

得到图片如下——
典型的被拉伸
显然是玩崩了,这个.9图片失去了它的特性,变成了普通的PNG图片

然后我们想到,在传统ImageView直接使用Drawable其实也会被警告并推荐使用ContextCompat.getDrawable(context , @ResId resId)方法。
那我们这里试试看——

Image(
		rememberImagePainter(
   								ContextCompat.getDrawable(context R.drawable.xxx)
   						), 
						"testFor.9",
                     	Modifier.size(300.dp, 50.dp),//设置一个与图片明显不符的宽高测试
                       	contentScale = ContentScale.FillBounds //拉伸图片以填充
               )

得到图片如下——
正常显示的.9png
wow~ awesome!

但显然大部分人会蹉跎这么一个小小的操作,根本想不到这里去,并认为compose不支持.9图,起码目前不支持

这时候大家就会想到——我添加一个AndroidView,里面展示.9图,岂不美哉!

添加AndroidView

语法很简单,直接看代码——

AndroidView({
    it:Context -> //传入了一个context供你初始化该view
//AndroidView中第一个参数默认返回一个传统View
//在这里进行view的初始化,它只会被调用一次,且保证在UI线程上被调用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值