开头感谢我的粉丝头子 (这位同学拒绝提供博客地址)提供的水群话题
不多说废话,直接进入正题
Compose中显示.9图
现在有.9图如下——
总所周知,compose中加载图片用Image()
image 的第一个参数:painter,
大家一般用自带的,或者官方推荐的coil
库
当前文章使用的两者API版本分别为compose 1.2.0-alpha02
和coil-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 //拉伸图片以填充
)
得到图片如下——
wow~ awesome!
但显然大部分人会蹉跎这么一个小小的操作,根本想不到这里去,并认为compose不支持.9图,起码目前不支持
这时候大家就会想到——我添加一个AndroidView,里面展示.9图,岂不美哉!
添加AndroidView
语法很简单,直接看代码——
AndroidView({
it:Context -> //传入了一个context供你初始化该view
//AndroidView中第一个参数默认返回一个传统View
//在这里进行view的初始化,它只会被调用一次,且保证在UI线程上被调用