glide:动态使用 Model Loaders

本文介绍如何使用Glide自定义加载图片的尺寸,通过创建CustomImageSizeModel接口及其实现类,配合CustomImageSizeUrlLoader,实现了按需加载特定宽度和高度的图片。

自定义图片大小

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

作个快速回顾:通常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实例构建,也不生效。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值