提问人:Uderly 提问时间:11/17/2023 最后编辑:Uderly 更新时间:11/17/2023 访问量:32
毛伊岛地图中图钉的延迟加载会在每次更新时闪烁/重新绘制所有图钉
Lazy loading of pins in Maui maps flickers/re-draws all the pins at every update
问:
我正在尝试延迟加载我需要在地图上显示的 300 多个图钉的集合。
考虑到我的图钉数据对于 API 来说并不多,我只在“Component_Loaded”事件中加载此信息一次,因此我有一个 ObservableCollection _allProviders,其中包含我在地图导航期间需要的所有数据。
根据这些数据,我可以为每个“提供者”计算用户当前在地图上显示的可见区域中心的距离。这个算法似乎效果很好。
我尝试了许多不同的方法,例如使用 MvvmHelpers.ObservableRangeCollection 或去抖动器一次添加多个引脚。没有运气。:/
我遇到的问题是,每次我添加一个新图钉时,标记都会重新绘制(导致“闪烁”),而且看起来并不好看。一旦加载了一个区域的所有引脚,性能就会完美。
我尚未设法实现的一个选项可能是 - 以某种方式 - 停止地图更新并在添加一些新引脚时调用它,但老实说,我缺乏想法,我不想尝试替代地图组件。
我真的很感激一些帮助,谢谢。
using Microsoft.Maui.Controls.Maps;
...
public MapsView()
{
InitializeComponent();
if (DeviceInfo.Platform == DevicePlatform.Android || DeviceInfo.Platform == DevicePlatform.iOS)
{
map.IsShowingUser = true;
map.Loaded += Component_Loaded;
map.PropertyChanged += HandleVisibleRegionEvent;
}
}
private async void HandleVisibleRegionEvent(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "VisibleRegion")
{
foreach (Provider p in _allProviders)
{
if (!p.IsMapped)
{
var d = GeoCalculator.CalculateDistance(p.Location.Latitude, p.Location.Longitude, map.VisibleRegion.Center.Latitude, map.VisibleRegion.Center.Longitude);
if (d < map.VisibleRegion.Radius.Kilometers)
{
p.IsMapped = true;
map.Pins.Add(new Pin()
{
Label = p.title,
Location = p.Location
});
await Task.Delay(100);
}
}
}
}
}
答: 暂无答案
评论