我希望使用Xamarin.Android上的Glide库,希望有人可以阐明如何使用AppGlideModule。根据文档,我需要使用AppGlideModule注册我的自定义ModelLoader。

这是Glide文档中示例的链接:
http://bumptech.github.io/glide/tut/custom-modelloader.html#writing-the-modelloader

这是我的自定义AppGlideModule类:

public class MyCustomGlideModule : AppGlideModule
{
    public override void ApplyOptions(Context context, GlideBuilder builder)
    {
        base.ApplyOptions(context, builder);
    }

    public override void RegisterComponents(Context context, Glide glide, Registry registry)
    {
        registry.Prepend(
            Java.Lang.Class.FromType(typeof(Java.IO.OutputStream)),
            Java.Lang.Class.FromType(typeof(Drawable)),
            new MyCustomImageStreamModelLoaderFactory()
        );
    }
}

我不知道是否有必要,但是如果您想查看我为ModelLoader创建的类,请在评论中让我知道。

最佳答案

古老的问题,但这是窍门。您将需要创建一个包含AppGlideModule包装器的Android/Java库。该库不包含其他任何内容,仅用于生成GlideApp类。它需要包含最终AppGlideModule的静态实例。基本上,它看起来像这样:

@GlideModule
public class XamarinGlideModule extends AppGlideModule {
    public static AppGlideModule InjectedModule;

    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {
        if(InjectedModule != null) {
            InjectedModule.registerComponents(context, glide, registry);
        }
    }
}

然后,您需要将此库包装在Android绑定(bind)库中。在此步骤中,没有什么值得一提的,只需将已构建的AAR放到绑定(bind)项目中,添加匹配版本的Glide Nuget并进行构建。

然后,您可以在应用程序项目中添加对该绑定(bind)库的引用。在您的Android应用程序类中,您将需要设置InjectedModule静态属性以注入(inject)Xamarin实现。您必须在调用Glide之前执行此操作,类似于以下操作:
public override void OnCreate()
{
    base.OnCreate();

    XamarinGlideModule.InjectedModule = new MyLoaderModule();
    var temp = GlideApp.Get(this); // Init Glide, it will register your Xamarin module
}

10-08 14:14