代わりに、新しいタイプのデータを処理append()
で新しいModelLoader
を、登録、どこ既存データのサブセットを処理prepend()
を、使用して登録ModelLoaderが失敗した場合、Glideのデフォルト動作に戻す必要があります。だから、新しいの入力データ(CustomImageSizeModelFutureStudio
という名前のチュートリアル)を作成する代わりに、String
の場合はGlideに、String
を修正してURLを作成するかどうかを確認してください。Glide
は、 String
を変更してください。ここに私の実装はKotlin
です。この場合、入力が「https:// ....」であれば、カスタムURLをリクエストします。あなたの入力が "content:// ..."の場合、handles()
メソッドのためModelLoader
が失敗し、Glide
がその作業を行います。
AppGlideModule
の実装:
@GlideModule
class MyGlideModule : AppGlideModule() {
override fun registerComponents(context: Context?, glide: Glide?, registry: Registry?) {
registry?.prepend(String::class.java, InputStream::class.java, CustomImageSizeUrlLoaderFactory())
}
}
ModelLoaderFactory
の実装:
class CustomImageSizeUrlLoaderFactory : ModelLoaderFactory<String, InputStream> {
private val modelCache = ModelCache<String, GlideUrl>(500)
override fun build(multiFactory: MultiModelLoaderFactory): ModelLoader<String, InputStream> {
val modelLoader = multiFactory.build(GlideUrl::class.java, InputStream::class.java)
return CustomImageSizeUrlLoader(modelLoader, modelCache)
}
override fun teardown() {
}
}
BaseGlideUrlLoader
の実装:
class CustomImageSizeUrlLoader(concreteLoader: ModelLoader<GlideUrl, InputStream>, modelCache: ModelCache<String, GlideUrl>?) : BaseGlideUrlLoader<String>(concreteLoader, modelCache) {
override fun getUrl(baseImageUrl: String, width: Int, height: Int, options: Options?): String {
return baseImageUrl + "?w=" + width + "&h=" + height;
}
override fun handles(model: String): Boolean {
return baseImageUrl.startsWith("http://")
|| baseImageUrl.startsWith("https://")
}
}
そして、あなたが正常に行いますと、あなたのグライドを呼び出し、チュートリアルではありません。
グライドで '.override(width、height)'メソッドを使用してみませんか?説明は[this](https://github.com/bumptech/glide/issues/1919)を参照 – Redman
オーバーライドするとイメージのサイズが変更されます。可能であれば、正確なimageViewサイズをサーバーから要求したいと思います。したがって、画像のサイズ変更は行われません。これが最高のパフォーマンスと最適化です。 –
@DamiaFuentes APIがそれを意味しない場合、異なるサイズの画像をリクエストすることはできません。 –