以 xamarin 形式加载位图图像
Bitmap image loading in xamarin forms
我在 xamarin 表单列表视图中加载图像时遇到内存问题,现在我需要在表单中实现位图图像,但我不能在 xamarin 表单中执行此操作我找不到任何命名空间,包括 xamarin 表单中的位图
我有一个普通的数据绑定代码,它也可以绑定图像
public async void GetResult()
//public void GetResult()
{
try
{
IsBusy = true;
var client = new HttpClient();
var json = await client.GetStringAsync(string.Format(Url));
var items = JsonConvert.DeserializeObject<ObservableCollection<cm_main_category>>(json.ToString());
foreach (var item in items)
{
item.image_url = "http://somelink.net" + item.image_url.Substring(1, item.image_url.Length - 1);
// item.image_url = "http://127.0.0.1" + item.image_url.Substring(1, item.image_url.Length - 1);
ListItems.Add(item);
}
IsBusy = false;
}
现在我需要为此代码实现位图应该采用什么方法?
很明显你想通过URI绑定图片。这在 Xamarin.Forms.
中非常简单
您只需将 ImageCell
的 ImageSourceProperty
绑定到知道 URI 的 属性。
XAML 绑定和 C# 绑定的一个很好的例子可以在这里找到:https://www.syntaxismyui.com/xamarin-forms-listview-imagecell-recipe/
编辑:
从评论中复制:解决方案是将图像源设置为 null 并触发垃圾收集,如下所述:
protected override void OnDisappearing()
{
BindingContext = null;
Content = null;
base.OnDisappearing();
GC.Collect();
}
在某些应用上,如果您的应用处理数以千计的数据且图像更好地添加位图,这将有所帮助
如果您想节省内存,可以尝试使用 FFImageLoading CachedImage
,它是 Image
API 具有高级内存缓存和下采样功能的兼容替代品。只需将 Image
替换为 CachedImage
并设置其下采样属性之一。
我在 xamarin 表单列表视图中加载图像时遇到内存问题,现在我需要在表单中实现位图图像,但我不能在 xamarin 表单中执行此操作我找不到任何命名空间,包括 xamarin 表单中的位图 我有一个普通的数据绑定代码,它也可以绑定图像
public async void GetResult()
//public void GetResult()
{
try
{
IsBusy = true;
var client = new HttpClient();
var json = await client.GetStringAsync(string.Format(Url));
var items = JsonConvert.DeserializeObject<ObservableCollection<cm_main_category>>(json.ToString());
foreach (var item in items)
{
item.image_url = "http://somelink.net" + item.image_url.Substring(1, item.image_url.Length - 1);
// item.image_url = "http://127.0.0.1" + item.image_url.Substring(1, item.image_url.Length - 1);
ListItems.Add(item);
}
IsBusy = false;
}
现在我需要为此代码实现位图应该采用什么方法?
很明显你想通过URI绑定图片。这在 Xamarin.Forms.
中非常简单您只需将 ImageCell
的 ImageSourceProperty
绑定到知道 URI 的 属性。
XAML 绑定和 C# 绑定的一个很好的例子可以在这里找到:https://www.syntaxismyui.com/xamarin-forms-listview-imagecell-recipe/
编辑:
从评论中复制:解决方案是将图像源设置为 null 并触发垃圾收集,如下所述:
protected override void OnDisappearing()
{
BindingContext = null;
Content = null;
base.OnDisappearing();
GC.Collect();
}
在某些应用上,如果您的应用处理数以千计的数据且图像更好地添加位图,这将有所帮助
如果您想节省内存,可以尝试使用 FFImageLoading CachedImage
,它是 Image
API 具有高级内存缓存和下采样功能的兼容替代品。只需将 Image
替换为 CachedImage
并设置其下采样属性之一。