我正在使用Android Map API v2
处理移动应用程序。这个应用程序具有全球天气信息,并具有许多与海和土地天气参数相关的功能例如 风,云,雨,压力,温度,波浪,膨胀。
正如我所说;应用程序具有天气参数,因此要使用Markers
在地图上显示这些参数,这似乎适用于每个参数;我在地图上为Marker
添加的每个参数都设置了一组图标。
我的问题是,我在地图上绘制了多个参数时获得OutOfMemoryException
。我了解Bitmap
及其处理方式,但在地图上绘制大量数据时,仍然难以找到删除此OutOfMemoryException
的最佳方法。
Markers
还有一件事正在发生,那就是我缩放地图图标时变小了。
这就是我在地图上绘制图标/标记所做的事情:
void CloudPlot()
{
var tempMarkers = new List<Marker>();
int cloudItemCount = 0, i = 0;
var data = GribReader.Instance.WeatherRequest.CloudRequest;
cloudItemCount = data.Count;
while (cloudItemCount > 0)
{
var cloudData = data[i];
Bitmap cloudBitmap = RotateBitmap(-1, GetCloudIcon(cloudData.ValueData));
Activity.RunOnUiThread(() =>
{
var cloudMarker = mwGoogleMap.AddMarker(new MarkerOptions()
.SetPosition(new LatLng(cloudData.Latitude + 0.3, cloudData.Longitude + 0.4))
.SetIcon(BitmapDescriptorFactory.FromBitmap(cloudBitmap))); //Cloud icon
tempMarkers.Add(cloudMarker);
});
i++;
cloudItemCount--;
if (cloudItemCount == 0)
{
i = 0;
ProgressCount--;
//Interlocked.Decrement(ref _progressCount);
if (VisibleParametrs.ContainsKey(MWParameters.CloudCover))
VisibleParametrs.Remove(MWParameters.CloudCover);
VisibleParametrs.Add(MWParameters.CloudCover, tempMarkers);
}
}
if (cloudItemCount == 0)
ProgressCount--;
}
关注旋转位图并缩小尺寸:
public Bitmap RotateBitmap(float angle, int windIcon)
{
Matrix matrix = new Matrix();
if (angle > -1)
matrix.PostRotate(angle);
BitmapFactory.Options options = new BitmapFactory.Options();
options.InSampleSize = 2;
Bitmap source = BitmapFactory.DecodeResource(Resources, windIcon, options);
return Bitmap.CreateBitmap(source, 0, 0, source.Width, source.Height, matrix, true);
}
我在地图上绘制云和风图标后得到以下结果(无缩放):
我们是否有最佳方法可以删除 OutOfMemoryException
?
也;我们可以做些什么来在缩放地图时使标记图标变大?
答案 0 :(得分:0)
在 CloudPlot 功能中,您确定要降低 cloudItemCount 变量的值吗? Becasue我在你发布的代码中没有看到。如果没有那么它将是一个无限循环并导致 OutOfMemoryException 。