2017-11-21 20 views
3

이 글은 ImageView 크기에 따라 서버로부터 다른 이미지 크기를로드하기 위해 사용자 정의 글라이드 모듈로 선언 된 tutorial을 따랐습니다. 나는 또한 같은 것을 설명하는 글라이드 wiki this을 살펴 보았다.글라이드 모듈 URL을로드하는 중 경로 및 임의의 URI 처리를 사용하는 사용자 지정 크기의 이미지

하지만 자습서와 Glide 위키의 구현은 사용자 정의 모듈에 보내는 String이 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

대신 기존 데이터 여기서 서브 세트를 처리하는 prepend()을 사용하여 등록, 새로운 유형의 데이터를 처리 append()와 새로운 ModelLoader를 등록 ModelLoader가 실패 할 경우 Glide의 기본 동작으로 되돌아 가고 싶습니다. 그러므로 새로운 의 입력 데이터 (CustomImageSizeModelFutureStudio이라는 튜토리얼에서)를 작성하는 대신, String의 경우 글라이드에게 String을 수정하고 URL을 생성할지 여부를 확인하거나 Glide이 자신의 작업을 수행하도록하십시오. String을 수정하십시오. 여기 내 구현은 Kotlin입니다. 이 경우 입력 내용이 "https : // ...."이면 맞춤 URL을 요청합니다. 입력 내용이 "content : // ..."인 경우 메서드로 인해 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()를 사용할 수 있습니다. 글라이드