Jetpack Compose 使用 Coil 加载图片
Compose 版本:1.0.0-beta08
Accompanist 版本:0.11.1
添加依赖
//Accompanist
val accompanistVersion = "0.11.1"
implementation("com.google.accompanist:accompanist-coil:$accompanistVersion")
//需加载 gif,可添加此依赖
implementation("io.coil-kt:coil-gif:1.2.1")
权限
<uses-permission android:name="android.permission.INTERNET"/>
Application 配置
class MyApplication : Application(), ImageLoaderFactory {
companion object {
@SuppressLint("StaticFieldLeak")
lateinit var context: Context
}
override fun onCreate() {
super.onCreate()
context = applicationContext
}
override fun newImageLoader(): ImageLoader {
return ImageLoader.Builder(context)
.componentRegistry {
// gif
if (SDK_INT >= Build.VERSION_CODES.P) {
add(ImageDecoderDecoder(context))
} else {
add(GifDecoder())
}
}
.allowHardware(false)
.diskCachePolicy(CachePolicy.ENABLED)
.memoryCachePolicy(CachePolicy.ENABLED)
.networkCachePolicy(CachePolicy.ENABLED)
.availableMemoryPercentage(0.5)
.okHttpClient {
// 自定义 client
OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.build()
}
.build()
}
}
使用
@Composable
fun LoadImage(url: String) {
val painter = rememberCoilPainter(request = url)
Image(
painter = when (painter.loadState) {
is ImageLoadState.Success -> painter
is ImageLoadState.Loading -> rememberCoilPainter(request = R.drawable.ic_launcher_foreground)
else -> rememberCoilPainter(request = R.drawable.ic_launcher_background)
}, contentDescription = null
)
}