【问题标题】:Load number of Images at a Time一次加载图像数量
【发布时间】:2021-05-11 16:45:14
【问题描述】:

我有大约 500 张静态图像EmbeddedResource。现在我在滑块的帮助下显示图像。所以当滑块值发生变化时,我会加载相应的图像。

        private void pageSlider_ValueChanged(object sender, ValueChangedEventArgs e)
        {
            var newStep = Math.Round(e.NewValue / StepValue);

            pageSlider.Value = newStep * StepValue;
            pageNumber.Text = pageSlider.Value.ToString();
            pageImage.Source = ImageSource.FromResource("SApp.Images.SPages.page" + pageSlider.Value.ToString() + ".jpg",typeof(AboutPage).GetTypeInfo().Assembly);
        }

现在,由于幻灯片对于迭代 500 张图像(总图像大小 40 MB)并不是那么用户友好,因此加载图像的正确方法是什么。 我想把它加载到Carousal control,但是当前的布局是TabbedPage,所以我不能这样做。 其他选项是将所有图像加载到ListView,但它会导致内存问题吗?或者ListViewPaging

【问题讨论】:

    标签: c# image xaml xamarin xamarin.forms


    【解决方案1】:
    1. 使用CollectionViewLoad data incrementally。或者通过将其包装在RefreshView 中来使用pull to refresh 功能,您将能够异步加载图像。

    编辑

    来自source:

    CollectionView 是一个视图,用于显示使用不同布局规范的数据列表。它旨在为 ListView 提供更灵活、更高效的替代方案。

    有关信息,您可以在 ListViewCollectionView 中使用 Pull to Refresh (Xamarin.Forms RefreshView)。

    1. 此外,为了在仅限 Android 上更快地加载图像和更流畅地滚动,您可以使用 glidex.forms 包,Official repo/docs

    【讨论】:

    • 是的。就是这个。我刚刚浏览了文档,它支持更多功能,如Context menu, Pull to refresh, Load data incrementally
    【解决方案2】:

    我想在 Carousal 控件中加载它,但当前布局是 TabbedPage,所以我不能这样做。其他选择是将所有图像加载到 ListView,但它会导致内存问题吗?还是带分页的 ListView ?

    也许您可以尝试使用FFImageLoading在ListView中显示图像,或者在silder值更新时更新图像源。

    有一些特点:

    1. 可配置的磁盘和内存缓存

    2. 使用相同图像源(url、路径、资源)的多个图像视图将只使用一个缓存在内存中的位图(更少的内存使用)

    3. 错误和加载占位符支持

    4. 图像可以自动下采样到指定大小(减少内存使用)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多