2017-11-21 17 views
3

これは、ImageViewのサイズに応じてサーバーから異なるイメージサイズをロードするカスタムグライドモジュールと宣言されたtutorialに従っています。私も同じように説明するGlide wiki thisを見ました。グライドモジュールURLをロードするパスと任意のuriを扱うカスタムサイズで

しかし、チュートリアルとGlide wikiの実装は、カスタムモジュールに送信する文字列がhttp/https URLである場合にのみ機能します。このカスタムモジュールを変更したり、他のすべてのタイプ(Glide.load()のようにString、Uri、intなど)を処理し、チュートリアルで示された機能を維持するには、新しいカスタムモジュールを作成するにはどうすればよいですか?

+0

グライドで '.override(width、height)'メソッドを使用してみませんか?説明は[this](https://github.com/bumptech/glide/issues/1919)を参照 – Redman

+0

オーバーライドするとイメージのサイズが変更されます。可能であれば、正確なimageViewサイズをサーバーから要求したいと思います。したがって、画像のサイズ変更は行われません。これが最高のパフォーマンスと最適化です。 –

+0

@DamiaFuentes APIがそれを意味しない場合、異なるサイズの画像をリクエストすることはできません。 –

答えて

-1

代わりに、新しいタイプのデータを処理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://") 
    } 
} 

そして、あなたが正常に行いますと、あなたのグライドを呼び出し、チュートリアルではありません。

-2

イメージをさまざまなサイズで読み込むには、グライドのデフォルトの方法を使用できます。override 異なるサイズのイメージをロードするには、以下のコードスニペットを確認してください。

GlideApp 
    .with(context) 
    .load(url) 
    .override(customwidth, customheight) // resizes the image to these dimensions (in pixel). resize does not respect aspect ratio 
    .into(imageViewResize); 

あなたが同様に縦横比を維持したい場合は、fitCenter()centerCrop()を使用することができます。グライドのために

関連する問題