はじめに
Compose UI
一般的なCompose UIプロジェクトでは、以下をインポートする必要があります。
implementation("io.coil-kt.coil3:coil-compose:3.3.0")
implementation("io.coil-kt.coil3:coil-network-okhttp:3.3.0")
インポート後、AsyncImage
を使用してネットワークから画像を読み込むことができます。
AsyncImage(
model = "https://example.com/image.jpg",
contentDescription = null,
)
::: Note Compose Multiplatformを使用する場合、OkHttpの代わりにKtorを使用する必要があります。その方法についてはこちらを参照してください。
:::
Android Views
Compose UIの代わりにAndroid Viewsを使用する場合は、以下をインポートします。
implementation("io.coil-kt.coil3:coil:3.3.0")
implementation("io.coil-kt.coil3:coil-network-okhttp:3.3.0")
インポート後、ImageView.load
拡張関数を使用してネットワークから画像を読み込むことができます。
imageView.load("https://example.com/image.jpg")
シングルトン ImageLoader の構成
デフォルトでは、CoilにはシングルトンImageLoader
が含まれています。ImageLoader
は、ImageRequest
の取得、デコード、キャッシュ、および結果の返却を行うことで、受信するImageRequest
を実行します。ImageLoader
を構成する必要はありません。構成しない場合、Coilはデフォルト設定でシングルトンImageLoader
を作成します。
いくつかの方法で構成できます(いずれか1つを選択してください)。
- アプリのエントリポイント(アプリのルート
@Composable
)付近でsetSingletonImageLoaderFactory
を呼び出す。これはCompose Multiplatformアプリに最適です。
setSingletonImageLoaderFactory { context ->
ImageLoader.Builder(context)
.crossfade(true)
.build()
}
- Androidで、
Application
にSingletonImageLoader.Factory
を実装する。これはAndroidアプリに最適です。
class CustomApplication : Application(), SingletonImageLoader.Factory {
override fun newImageLoader(context: Context): ImageLoader {
return ImageLoader.Builder(context)
.crossfade(true)
.build()
}
}
- アプリのエントリポイント(例:Androidの
Application.onCreate
)付近でSingletonImageLoader.setSafe
を呼び出す。これが最も柔軟な方法です。
SingletonImageLoader.setSafe { context ->
ImageLoader.Builder(context)
.crossfade(true)
.build()
}
::: Note Coilに依存するライブラリを作成している場合、シングルトンImageLoader
を取得/設定すべきではありません。代わりに、io.coil-kt.coil3:coil-core
に依存し、独自のImageLoader
を作成して手動で渡す必要があります。ライブラリ内でシングルトンImageLoader
を設定すると、そのライブラリを使用しているアプリがCoilも使用している場合に、アプリによって設定されたImageLoader
を上書きしてしまう可能性があります。
:::
アーティファクト
CoilがmavenCentral()
に公開している主要なアーティファクトのリストを以下に示します。
io.coil-kt.coil3:coil
:io.coil-kt.coil3:coil-core
に依存するデフォルトのアーティファクトです。シングルトンImageLoader
と関連する拡張関数が含まれています。io.coil-kt.coil3:coil-core
:io.coil-kt.coil3:coil
のサブセットで、シングルトンImageLoader
および関連する拡張関数は含まれていません。io.coil-kt.coil3:coil-compose
:io.coil-kt.coil3:coil
とio.coil-kt.coil3:coil-compose-core
に依存するデフォルトのCompose UIアーティファクトです。シングルトンImageLoader
を使用するAsyncImage
、rememberAsyncImagePainter
、SubcomposeAsyncImage
のオーバーロードが含まれています。io.coil-kt.coil3:coil-compose-core
:io.coil-kt.coil3:coil-compose
のサブセットで、シングルトンImageLoader
に依存する関数は含まれていません。io.coil-kt.coil3:coil-network-okhttp
: OkHttpを使用してネットワークから画像をフェッチするサポートが含まれています。io.coil-kt.coil3:coil-network-ktor2
: Ktor 2を使用してネットワークから画像をフェッチするサポートが含まれています。io.coil-kt.coil3:coil-network-ktor3
: Ktor 3を使用してネットワークから画像をフェッチするサポートが含まれています。io.coil-kt.coil3:coil-network-cache-control
: ネットワークから画像をフェッチする際に、Cache-Control
ヘッダーを尊重するサポートが含まれています。io.coil-kt.coil3:coil-gif
: GIFのデコードをサポートするための2つのデコーダーが含まれています。詳細についてはGIFsを参照してください。io.coil-kt.coil3:coil-svg
: SVGのデコードをサポートするためのデコーダーが含まれています。詳細についてはSVGsを参照してください。io.coil-kt.coil3:coil-video
: Androidがサポートする任意のビデオ形式からフレームをデコードするサポートのためのデコーダーが含まれています。詳細についてはvideosを参照してください。io.coil-kt.coil3:coil-test
: テストをサポートするためのクラスが含まれています。詳細についてはtestingを参照してください。io.coil-kt.coil3:coil-bom
: ビルオブマテリアルが含まれています。coil-bom
をインポートすると、バージョンを指定せずに他のCoilアーティファクトに依存できるようになります。