【问题标题】:Xamarin Forms: Default Image if Url not foundXamarin Forms:如果找不到 URL,则默认图像
【发布时间】:2016-05-20 04:10:04
【问题描述】:

在 xamarin 表单中,我们可以像这样创建图像:

Image i = new Image { Source = "http://www.foo.com/foo.jpg };

在将这个添加到布局后,如果 url 返回一个图像,它将显示它。我现在想要的是有一种方法可以知道这个 Url 是否是一个实际的图像。否则,我将显示默认图像。

问候。

编辑

我已经创建了一个函数:

public string GetImageSourceOrDefault(string orgUrl)
        {
            var req = (HttpWebRequest)WebRequest.Create(orgUrl);
            req.Method = "HEAD";
            try
            {
                using (var resp = req.GetResponse())
                {
                    bool res = resp.ContentType.ToLower(CultureInfo.InvariantCulture)
                        .StartsWith("image/");
                    if (res)
                        return orgUrl;
                    else
                        return "defualt_logo.jpg";
                }
            }
            catch
            {
                return "default_logo.jpg";
            }

        }

这个函数可以解决问题。但是,对于每个图像,它都会发出请求。我有一个列表视图,它显示了 220 个条目。使用这种方法会扰乱 listview 的加载时间。

注意:这个函数是使用依赖注入本地调用的。

也许会做进一步的改进。有什么想法吗?

【问题讨论】:

    标签: c# image xamarin mono xamarin-forms


    【解决方案1】:

    FFImageLoading CachedImage 支持加载和错误占位符(以及更多)。它基本上是 Image 的 API 兼容替代品,具有附加属性。你可以试试。

        var cachedImage = new CachedImage() {
            LoadingPlaceholder = "Loading.png",
            ErrorPlaceholder = "Error.png"
        };
    

    https://github.com/molinch/FFImageLoading

    【讨论】:

      【解决方案2】:

      Xamarin.FormsUriImageSource可以通过CacheValidityCachingEnabled属性指定不同的缓存长度,是否使用缓存。

      默认情况下,它会在设备的本地存储中自动缓存 1 天的结果。

      正如您所提到的,在您的功能中,您每次都在下载图像。

      您当前没有存储和缓存结果以供以后重复使用的功能。

      通过在平台特定层上实现类似的东西,可以绕过您当前每次重新下载图像的解决方案。

      或者作为一种解决方法,如果您不想实现上述操作,您可以尝试将两个 Image 控件堆叠在一起,可能在 Grid 中,底部图像显示默认占位符图像,在另一个 Image 控件之上,如果成功下载,将使用 UriImageSource 显示预期图像。

      您也可以挂钩到Image.SourcePropertyChange 通知并检测到它正在设置,然后显示图像。检测到后,您也许可以从临时占位符Image 控件中释放图像?

      【讨论】:

        猜你喜欢
        • 2015-06-03
        • 2017-08-14
        • 2020-08-16
        • 2023-02-05
        • 2021-02-23
        • 2018-07-27
        • 2012-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多