MvxImageViewLoader行为覆盖(缓存,图像出现等)

时间:2013-06-24 12:05:22

标签: image caching xamarin mvvmcross

我对 MvvmCross Xamarin 应用程序使用 MvxImageViewLoader

这个组件非常棒,简化了加载的图像,但它(至少是开箱即用的)非常基本而大多数现代应用程序需要一些例如,加载/进展图片或图片显示/转换(可能带有自定义动画)。

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

那么,是否有任何方式来自定义/扩展加载器行为(对于默认图像出现图像转换(从默认到加载))等?


我也注意到加载程序缓存图像,即使我触发绑定属性更改(保留图像网址相同)它确实不刷新图像。我想,“缓存”实际上意味着缓存等等,但如果我需要更改用户图标或其他内容...... 如何使用图像加载器更新缓存

谢谢!

2 个答案:

答案 0 :(得分:0)

  

那么,有没有办法自定义/扩展加载器行为(默认图像出现,图像转换(从默认图像到加载图像))等等?

否 - 标准MvvmCross图像视图中不支持高级功能,如淡入/淡出/动画占位符显示,我所知道的任何人都没有提供任何关于如何进行此操作的示例或教程完成。

要添加此类功能,您可以使用常规软件技术 - 继承,聚合和剪切,复制,粘贴。例如您可以根据MvxImageView.cs创建自己的AgatImageView,其中包含您的应用所需的行为。

创建自己的数据绑定控件的一些示例在http://mvvmcross.wordpress.com/的N = 18和N-19中给出

答案 1 :(得分:0)

正如您在上面的评论中已经提到的,您可以使用默认的iOS' UIActivityIndicatorView用于显示进度,您应该隐藏afterImageChangeAction中的进度,您可以检查UIImageView.Image字段是否为空,以确保图像已加载。

关于缓存,这里并不容易。默认情况下,MvxImageViewLoader依赖于MvvmCross框架的IMvxFileDownloadCache接口实现。这个接口只有一个公共方法RequestLocalFilePath(),所以即使你从IoC容器(Mvx.Resolve())获得一个实例,你也无法清理现有的缓存(为此你做到了需要重置private _entriesByHttpUrl类的MvxFileDownloadCache字段。

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

也许您可以使用一些老派的方法,例如向网址添加GET参数:http://mydomain.com/images/myimage.jpg?timestamp=123456。通常这对所有地方都有帮助:-)。虽然我没有用MvxImageViewLoader进行测试,但这只是我最好的猜测。