AndroidStudio上配置Glide4.3.1(含)之上的版本

时间:2024-03-29 07:41:11
前言:加载图片的框架有很多,从早期的XUtils、Universal Image Loader,到后来的Volley,以及现在如日中天的Glide和Picasso,以及Facebook的Fresco。XUtils、Universal Image Loader和Volley都用过,上一个项目用的Volley,后来项目中要加载GIF图片,于是嵌入了Glide框架的3.7版本。目前在行项目中,使用Glide的4.3.1版本,然后瞬间懵了,因为4.3.1版本中,除了widt、load、into方法,再也没有其他的方法了。本文就是为了让你在使用Glide4.3.1版本时也能有fallback、error、override、plaeholder等方法。
一、导入Glide相关架包

导入架包,就涉及到build.gradle文件的配置,在AS中,有两个build.gradle文件,一个在项目目录下,一个在app目录下。

首先、在项目的build.gradle文件中添加mavenCentral()方法,主要是方便项目引用mavenCentral中的开源项目;

AndroidStudio上配置Glide4.3.1(含)之上的版本

其次、在app目录下的build.gradle文件下引入架包

AndroidStudio上配置Glide4.3.1(含)之上的版本

二、创建相关类MyAppGlideModule(继承AppGlideModule)和MyBaseGlideUrlLoader(继承),名字自己随便起,值得注意的是,MyAppGlideModule类需要使用注释@GlideModule

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
//        super.applyOptions(context, builder);
        // 重新设置内存限制
        builder.setMemoryCache(new LruResourceCache(10 * 1024 * 1024));
    }

    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {
//        super.registerComponents(context, glide, registry);
        registry.append(String.class, InputStream.class, new MyBaseGlideUrlLoader.MyFactory());
    }

    @Override
    public boolean isManifestParsingEnabled() {
//        return super.isManifestParsingEnabled();
        return false;
    }
}

public class MyBaseGlideUrlLoader extends BaseGlideUrlLoader<String> {
    private static final ModelCache<String, GlideUrl> mModelCache = new ModelCache<>(150);

    private MyBaseGlideUrlLoader(ModelLoader<GlideUrl, InputStream> modelLoader, ModelCache<String, GlideUrl> modelCache) {
        super(modelLoader, modelCache);
    }

    @Override // __w-200-400-800__
    protected String getUrl(String s, int width, int height, Options options) {
        Matcher matcher = Pattern.compile("__w-((?:-?\\d+)+)__").matcher(s);
        int bestBucket = 0;
        if (matcher.find()) {
            String[] found = matcher.group(1).split("-");
            for (String bucket : found) {
                bestBucket = Integer.parseInt(bucket);
                if (bestBucket >= width)
                    break;
            }
            if (bestBucket > 0)
                s = matcher.replaceFirst("w" + bestBucket);
        }
        return s;
    }

    @Override
    public boolean handles(String s) {
        return true;
    }

    /**
     * 工厂
     */
    public static class MyFactory implements ModelLoaderFactory<String, InputStream> {

        @Override
        public ModelLoader<String, InputStream> build(MultiModelLoaderFactory multiFactory) {
            return new MyBaseGlideUrlLoader(multiFactory.build(GlideUrl.class, InputStream.class), mModelCache);
        }

        @Override
        public void teardown() {}
    }
}

总结:只需要2步,编译项目后,会在build目录下出现一个GlideApp的类,用这个类就可以轻松实现3.7版本中的方法了

AndroidStudio上配置Glide4.3.1(含)之上的版本