使用Glide下载自定义大小图片

开发者可以通过Glide的ModelLoader接口获得图片大小,并根据这个大小来加载一个合适尺寸的图片url。 使用合适尺寸的图片可以节约带宽,设备的存储空间,还可以提升app性能。 2014年的Google I/O app团队写了一篇关于如何使用ModelLoader接口调整加载的图片大小的文章。请在GitHub上查看 I/O app的源码。 为了实现自定义的ModelLoader来通过http/https下载图片,可以继承BaseGlideUrlLoader这个类

public interface MyDataModel {
    public String buildUrl(int width, int height);
}  

public class MyUrlLoader extends BaseGlideUrlLoader<MyDataModel> {
    @Override
    protected String getUrl(MyDataModel model, int width, int height) {
        // Construct the url for the correct size here.
        return model.buildUrl(width, height);
    }
}

然后,你就可以使用自定义的ModelLoader来加载图片了,其他的事情会自动完成:

Glide.with(yourFragment)
    .using(new MyUrlLoader())
    .load(yourModel)
    .into(yourView);

如果你想避免调用.using(new MyUrlLoader()),你可以实现一个自定义的ModelLoaderFactory,并在GlideModule中注册它。

public class MyGlideModule implements GlideModule {
    ...
    @Override
    public void registerComponents(Context context, Glide glide) {
        glide.register(MyDataModel.class, InputStream.class,
            new MyUrlLoader.Factory());
    }
}

注册ModelLoaderFactory之后,你就不用调用.using()了:

Glide.with(yourFragment)
    .load(yourModel)
    .into(yourView);

其他的例子,关于如何使用自定义ModelLoader加载各种尺寸的图片,请查看Flicker示例应用,和Giphy示例应用