如何在Xamarin.Android中使用AppGlideModule?

5

我希望在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创建的类,请在评论中告诉我。


那么,你的问题是什么?你按照三个步骤做了吗? - Robbit
我相当有信心。我认为我的问题在于“@GlideModule”注释(这是正确的术语吗?)。在他们的示例中,他们将@GlideModule放在AppGlideModule类上方,我猜Java知道如何与Glide连接。只是我不知道如何在Xamarin C#中实现这一点。 - hellaandrew
另外,我已经尝试在我的AppGlideModule类上方添加[Annotation("GlideModule")]和[Annotation("@GlideModule")],但都没有成功。 - hellaandrew
你不能在Xamarin中使用此函数,因为在这个Xamarin.Android库中,这是它的.jar文件,用于绑定。在.jar文件中,没有com.bumptech.glide.annotation,所以它没有GlideModule。你可以找到一个GlideModule,但它在com.bumptech.glide.module文件夹中,并且已经被标记为@Deprecated。我已经找了几个小时,你也可以检查是否有可用的GlideModule。所以我认为,你需要自己绑定glide .jar文件,或者你可以使用.aar。 - Robbit
@SanifSS 我没有。我相信截至目前,Xamarin尚不支持注释功能。不幸的是,这似乎只是Android Studio / Java的一个特性 =[ - hellaandrew
显示剩余3条评论
2个回答

1

虽然这是一个老问题,但以下是诀窍。您需要创建一个包含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绑定库中。在这一步中没有值得一提的事情,只需将构建的AAR放入绑定项目中,添加相应版本的Glide Nuget并构建即可。

然后,您可以在应用程序项目中添加对该绑定库的引用。在Android应用程序类中,您需要设置InjectedModule静态属性以注入您的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
}

0

1
是的,那就是我在Nuget中描述的内容。 - Sylvain Gravel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接