滑动模块加载URL图像在自定义大小中,包含路径和任何uri处理

时间:2017-11-21 17:35:01

标签: android android-glide

我已按照此tutorial声明自定义Glide模块,根据ImageView大小从服务器加载不同的图像尺寸。我还看了this Glide wiki,它解释了相同的内容。

但是,如果您发送到自定义模块的字符串是http / https网址,则教程和Glide wiki上的实现才有效。如何修改此自定义模块或创建一个新模块以便处理所有其他类型(String,Uri,int等,如Glide.load()所做)并保持教程中提供的功能?

2 个答案:

答案 0 :(得分:-1)

不是使用处理新类型数据的ModelLoader注册新的append(),而是使用prepend()注册它,该Glide处理现有数据的子集,而您希望回退到这些数据的子集如果您的ModelLoader失败,Glide的默认行为。因此,不要创建新的CustomImageSizeModelFutureStudio输入数据(在名为String的教程中),请告诉Glide,如果是String,请检查是否要修改Glide并创建您的网址或让String无需修改Kotlin即可完成工作。这是我在ModelLoader中的实现。在这种情况下,如果您的输入是“https:// ....”,它将请求您的自定义网址。如果您的输入是“content:// ...”,则handles()会因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://") } } 的实施:

(cd /usr/testing/member; find . -maxdepth 1 \( ! -name . -a ! -name public \) -exec echo rm -fr {} +)

按照通常的做法调用你的Glide,而不是像教程那样。

答案 1 :(得分:-2)

要加载不同尺寸的图像,您可以使用滑翔的默认方法open 请查看以下代码段,了解不同尺寸的装载图片。

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()