Xamarin Forms:如果找不到 URL,则默认图像
Posted
技术标签:
【中文标题】Xamarin Forms:如果找不到 URL,则默认图像【英文标题】:Xamarin Forms: Default Image if Url not found 【发布时间】: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 的加载时间。
注意:这个函数是使用依赖注入本地调用的。
也许会做进一步的改进。有什么想法吗?
【问题讨论】:
【参考方案1】:FFImageLoading CachedImage
支持加载和错误占位符(以及更多)。它基本上是 Image
的 API 兼容替代品,具有附加属性。你可以试试。
var cachedImage = new CachedImage()
LoadingPlaceholder = "Loading.png",
ErrorPlaceholder = "Error.png"
;
https://github.com/molinch/FFImageLoading
【讨论】:
【参考方案2】:Xamarin.Forms
UriImageSource
可以通过CacheValidity
和CachingEnabled
属性指定不同的缓存长度,是否使用缓存。
默认情况下,它会在设备的本地存储中自动缓存 1 天的结果。
正如您所提到的,在您的功能中,您每次都在下载图像。
您当前没有存储和缓存结果以供以后重复使用的功能。
通过在平台特定层上实现类似的东西,可以绕过您当前每次重新下载图像的解决方案。
或者作为一种解决方法,如果您不想实现上述操作,您可以尝试将两个 Image
控件堆叠在一起,可能在 Grid
中,底部图像显示默认占位符图像,在另一个 Image
控件之上,如果成功下载,将使用 UriImageSource
显示预期图像。
您也可以挂钩到Image
.Source
的PropertyChange
通知并检测到它正在设置,然后显示图像。检测到后,您也许可以从临时占位符Image
控件中释放图像?
【讨论】:
以上是关于Xamarin Forms:如果找不到 URL,则默认图像的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms错误CS0246'Foundation'找不到
Xamarin.Forms.Xaml.XamlParseException:位置10:18。找不到关键字TwoButtonTopBarTemplate的StaticResource
Xamarin.Forms.Picker 内容在 UWP 中重复
在 Android 的发布模式下编译时出现 Xamarin Forms 错误 - 找不到与给定名称“Base.V21.Widget.Design.AppBarLayout”匹配的资源