性能动态添加图像

时间:2015-10-08 07:56:23

标签: xamarin xamarin.forms

我有图片库(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;

    }

但它没有帮助。如何组织页面上大量图像的提取?

2 个答案:

答案 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>