MvxImageViewLoader行为覆盖(缓存、图像显示等)

MvxImageViewLoader行为覆盖(缓存、图像显示等),image,caching,xamarin,mvvmcross,Image,Caching,Xamarin,Mvvmcross,我对MvvmCross-Xamarin应用程序使用MvxImageViewLoader 这个组件真的很棒,可以大大简化图像加载,但它至少是开箱即用的,非常基本,大多数现代应用程序都需要一些触角功能,例如,加载/推进图像或图像(可能带有自定义动画)的漂亮外观/过渡 我看到有DefaultImagePath属性,但这是静态图像,我可以默认使用它,但这不是动画视图或其他东西 那么,是否有任何方法可以自定义/扩展加载程序的行为,以显示默认图像、从默认图像过渡到加载图像等 我还注意到加载程序缓存了图像,即

我对MvvmCross-Xamarin应用程序使用MvxImageViewLoader

这个组件真的很棒,可以大大简化图像加载,但它至少是开箱即用的,非常基本,大多数现代应用程序都需要一些触角功能,例如,加载/推进图像或图像(可能带有自定义动画)的漂亮外观/过渡

我看到有DefaultImagePath属性,但这是静态图像,我可以默认使用它,但这不是动画视图或其他东西

那么,是否有任何方法可以自定义/扩展加载程序的行为,以显示默认图像、从默认图像过渡到加载图像等

我还注意到加载程序缓存了图像,即使我触发了绑定属性更改,但图像url保持不变,它也不会刷新图像。我想,缓存真的意味着缓存等等,但是如果我需要更改用户图标或其他什么。。。如何使用图像加载器刷新缓存

谢谢大家!

那么,是否有任何方法可以自定义/扩展加载程序的行为,以显示默认图像、从默认图像过渡到加载图像等

否-标准MvvmCross图像视图不支持淡入/淡出/动画占位符显示等高级功能,据我所知,没有人提供过有关如何实现这一点的示例或教程

要添加这样的功能,您可以使用普通的软件技术—继承、聚合和剪切、复制、粘贴。e、 g.你可以简单地创建自己的AgatImageView,该视图具有应用程序所需的行为基础


的N=18和N-19中给出了一些创建自己的数据绑定控件的示例,正如您在上面的注释中所提到的,您可以使用默认iOS的UIActivityIndicatorView来显示进度,并且您应该在ImageChangeAction中隐藏进度,您可以检查UIImageView.Image字段是否为空,以确保图像已加载

关于缓存,这里不是那么容易。默认情况下,MvxImageViewLoader依赖于MvvmCross框架的IMvxFileDownloadCache接口实现。此接口只有一个公共方法RequestLocalFilePath,因此即使您从IoC容器Mvx.Resolve获取实例,您也无法清理现有缓存,因此需要重置MvxFileDownloadCache类的private _entriesByHttpUrl字段

如果您真的需要这个,您必须复制粘贴现有的MvxFileDownloadCache类并进行调整。但是我不确定你的用例在哪里需要它。如果从web下载图像,图像的URL是缓存中的一种键,因此如果需要重新加载,只需更改URL即可


也许您可以使用一些老派的方法,比如将GET参数添加到URL:。通常这对任何地方都有帮助:-。虽然我没有使用MvxImageViewLoader进行测试,但这只是我最好的猜测。

好吧,我完全理解MvvmCross在这里使用的方法,以及这样一个事实,即这可能很难满足任何开发人员在淡出等方面的口味。特别是考虑到多平台。但是,如果只有像OnImageLoadingComplete这样的事件,那么实现任何此类奇特的事情就会容易得多。是否有机会通过继承基类来扩展功能,或者管理该功能的唯一方法是扩展源代码和重新编译代码,甚至请求PullRequest?我鼓励您花一些时间进行实验和原型化。您会发现ImageChanged事件已经公开,我怀疑您可以将该事件用于您当前的需求。是的,MvvmCross接受一些PullRequests,但我们也鼓励人们构建备用插件和扩展库。正如您所说,一个库不能满足每个开发人员的口味和需求。此外,构建扩展还为贡献者提供了更多的学习、实验和构建空间。在这件事上,我彻底失败了。Stuart事实上,经过一些探索,我遇到了MvxImageViewLoader构造函数的afterImageChangeAction参数。这就是我完成图像加载所需要的一切。然而,缓存的问题对我来说还不是很清楚。我花了几个小时研究了所有的插件/管理器/配置类,甚至在源代码中添加了一些属性,重新编译后得到了MvxImageCache Mvx.Resolve.MaxInMemoryFiles=0;但我还是摆脱不了为什么。缓存会产生问题,特别是在调试/开发阶段。有一些配置类,但我找不到如何轻松使用它们。谢谢你的回答,不过,在底部的评论中已经提到了afterImageChangeAction。所以,我已经这样做了。但对于缓存,奇怪的是MvvmCross在定制和探索其sou时非常灵活
在rces中,我发现缓存和其他插件设置初始化甚至有一些特殊的类,但所有这些都是内部的,没有简单的方法在框架之外使用这种行为。至少,如果有文档的话,我没有在文档中找到,也没有详细信息。至于url参数:当然,这是我管理它的方式,但这只是使逻辑复杂化了。也无法扩展插件的功能,例如检测http头“Last modified”。