我希望使用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
}