我有图片库(100个)的内容页面。但加载页面需要很长时间(平均= 5-7秒)。我尝试在alt.Thread中动态加载图像到sclollView。这是我的代码:
public ScrollView CreateGallery(List<MetroButton> controls)
{
var stack = new StackLayout(){Orientation = StackOrientation.Vertical, Spacing = 0};
if (controls.Count == 0)
return new ScrollView ();
ScrollView scoll = new ScrollView () { Orientation = ScrollOrientation.Vertical};
scoll.Content = stack;
//here dynamically add images to scrollView
Task.Run(() =>
{
for (int i = 0; i < controls.Count - 1; i = i + 2)
{
stack.Children.Add(createDoubleImages(controls[i], controls[i+1]));
}
if (controls.Count % 2 != 0)
{
stack.Children.Add(createDoubleImages(controls[controls.Count - 1], null));
}
});
return scoll;
}
但它没有帮助。如何组织页面上大量图像的提取?
答案 0 :(得分:1)
一些提示:
使用ListView - 动态滚动时会加载图像(不是一次性所有内容)
你可以尝试用以下代码替换Image with CachedImage:https://github.com/molinch/FFImageLoading - 它将图像加载/下载排队并自动缓存它们。它可以使性能更好 - 页面将立即加载。准备好后,图像将从另一个线程加载。
还有一件事:
您正在从另一个线程(Task.Run)修改UI - 您无法执行此操作。在任务中使用Device.BeginInvokeOnMainThread
。
答案 1 :(得分:0)
我在实施DataGrid component for Xamarin.Forms时遇到了一些问题,而且速度很慢。我提议使用ListView来实现这一目的,并制作一个自定义模板来显示其中的图像。
< ListView ItemsSource="{Binding ImagesList}" RowHeight="120">
< ListView.ItemTemplate>
< DataTemplate>
< ViewCell>
< ViewCell.View>
< Image Source="{Binding .}" Aspect="Fill"/ >
</ Grid>
</ ViewCell.View>
</ ViewCell>
</ DataTemplate>
</ ListView.ItemTemplate>
</ ListView>