一次加载图像数量
Posted
技术标签:
【中文标题】一次加载图像数量【英文标题】: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
,但它会导致内存问题吗?或者ListView
和Paging
?
【问题讨论】:
【参考方案1】:-
使用
CollectionView
和Load data incrementally。或者通过将其包装在RefreshView
中来使用pull to refresh 功能,您将能够异步加载图像。
编辑
来自source:
CollectionView 是一个视图,用于显示使用不同布局规范的数据列表。它旨在为 ListView 提供更灵活、更高效的替代方案。
有关信息,您可以在 ListView
或 CollectionView
中使用 Pull to Refresh (Xamarin.Forms RefreshView)。
-
此外,为了在仅限 Android 上更快地加载图像和更流畅地滚动,您可以使用 glidex.forms 包,Official repo/docs。
【讨论】:
是的。就是这个。我刚刚浏览了文档,它支持更多功能,如Context menu, Pull to refresh, Load data incrementally
,【参考方案2】:
我想在 Carousal 控件中加载它,但当前布局是 TabbedPage,所以我不能这样做。其他选择是将所有图像加载到 ListView,但它会导致内存问题吗?还是带分页的 ListView ?
也许您可以尝试使用FFImageLoading在ListView中显示图像,或者在silder值更新时更新图像源。
有一些特点:
可配置的磁盘和内存缓存
使用相同图像源(url、路径、资源)的多个图像视图将只使用一个缓存在内存中的位图(更少的内存使用)
错误和加载占位符支持
图像可以自动下采样到指定大小(减少内存使用)
【讨论】:
按照 Cfun 的建议,CollectionView
怎么样。
@Rauf 建议你用ListView来做,因为ListView有ListViewCachingStrategy属性,RecycleElement缓存策略指定ListView会尽量减少通过回收列表单元来实现其内存占用和执行速度。
CollectionView automatically uses the virtualization provided by the underlying native controls.以上是关于一次加载图像数量的主要内容,如果未能解决你的问题,请参考以下文章
使用 ImageMagick C++ API 读取 PDF 中的页面数量,而不读取所有图像