美文网首页图片android基础知识
Glide入门教程——20.动态使用 Model Loaders

Glide入门教程——20.动态使用 Model Loaders

作者: 签到钱就到 | 来源:发表于2016-05-16 19:47 被阅读1121次

    Glide — 动态使用 Model Loaders

    原文:Dynamically Use Model Loaders
    作者:Norman Peitek
    翻译:Dexter0218

    上篇文章,你见过了如何声明和创建一个可以添加图片大小到请求里的Glide module。这是非常强大的优化。然而,重要的是声明Glide module总是主动的。默认情况下,你不能动态开启或关闭他们。

    在本文中,你会学习如何为单独的请求在网络上注册一个自定义model loader。

    Glide 系列概览

    1. 入门简介
    2. 高级加载
    3. 适配器(ListView, GridView)
    4. 占位图& 淡入淡出动画
    5. 图片大小 & 缩放
    6. 播放GIF & 视频
    7. 缓存基础
    8. 请求优先级
    9. 缩略图
    10. 回调:定制view中使用SimpleTarget和ViewTarget
    11. 通知栏和桌面小控件的图片加载
    12. 异常: 调试和报错处理
    13. 自定义变换
    14. 用animate()定制动画
    15. 整合网络协议栈
    16. 用Modules定制Glide
    17. Glide Module 案例: 接受自签名HTTPS证书
    18. Glide Module 案例: 自定义缓存
    19. Glide Module 案例: 通过加载自定义大小图片优化
    20. 动态使用 Model Loaders
    21. 如何旋转图片
    22. 系列综述

    自定义图片大小

    提示:如果你没有读之前的文章,确保你看了。否则下面内容会让你困惑。

    作个快速回顾:通常Glide请求是从GlideUrl类中生成。上篇文章,我们展示了如何创建一个新的接口,额外将宽度和高度添加到考虑范围:

    public interface CustomImageSizeModel {  
        String requestCustomSizeUrl(int width, int height);
    }
    

    我们创建了它的一个实例,向我们的Future Studio服务器传递了额外尺寸图片的URL。

    public static class CustomImageSizeModelFutureStudio implements CustomImageSizeModel {
    
        String baseImageUrl;
    
        public CustomImageSizeModelFutureStudio(String baseImageUrl) {
            this.baseImageUrl = baseImageUrl;
        }
    
        @Override
        public String requestCustomSizeUrl(int width, int height) {
            return baseImageUrl + "?w=" + width + "&h=" + height;
        }
    }
    

    最后,但并非最不重要的,我们必须创造customimagesizeurlloader,传递高度和宽度到我们model的实现:

    public static class CustomImageSizeUrlLoader extends BaseGlideUrlLoader<CustomImageSizeModel> {  
        public CustomImageSizeUrlLoader(Context context) {
            super( context );
        }
    
        @Override
        protected String getUrl(CustomImageSizeModel model, int width, int height) {
            return model.requestCustomSizeUrl( width, height );
        }
    }
    

    Model Loaders的.using()的动态使用

    目前为止,我们上面的代码声明的Glide module。Glide会为每个单独的请求使用它。如果你不希望那样,通过在AndroidManifest.xml里移除来关闭你的Glide module。我们可以那样做,是因为Glide提供了.using()方法为一个单独请求去指定一个模型:

    String baseImageUrl = "https://futurestud.io/images/example.png";  
    CustomImageSizeModel customImageRequest = new CustomImageSizeModelFutureStudio( baseImageUrl );
    
    Glide  
            .with( context )
            .using( new CustomImageSizeUrlLoader( context ) )
            .load( customImageRequest )
            .into( imageView1 );
    

    正如你上面所见,我们为加载优化尺寸的图片,创建了一个CustomImageSizeModelFutureStudio对象。由于我们没有在Glide module里声明CustomImageSizeModel接口,我们必须在上一行用.using(new CustomImageSizeUrlLoader( context ) )方法指定它。Glide会只为这个请求使用这个模型。其他的所有请求,即使他们也从CustomImageSizeModel实例构建,也不生效。

    展望

    本文中,你学会了如何为一个具体的请求使用指定请求模型。如果你不要或者不能使用AndroidManifest里的Glide modules,这对你是一个简单的选择。

    本文中,你已经完成了深入学习Glide module和他们的使用方式。下期,我们会把这个系列整合起来。

    相关文章

      网友评论

        本文标题:Glide入门教程——20.动态使用 Model Loaders

        本文链接:https://www.haomeiwen.com/subject/ymkmrttx.html