每次用户触摸地图位置的屏幕时,我都会在地图上绘制位图。 位图是我创建的布局的“图片”。
当我监控内存分配时,我发现内存分配不断增长, 即使在GC之后......
我正在重用位图,所以下面的代码出了什么问题?
每次用户触摸屏幕时,都会调用此方法,并且ondraw方法绘制返回的overalldrawing:
public Bitmap LoadBitmapFromView(RelativeLayout drawingCanvas, int width,int height)
{
drawingCanvas.LayoutParameters=(new RelativeLayout.LayoutParams(width, height));
drawingCanvas.Measure(MeasureSpec.MakeMeasureSpec(drawingCanvas.LayoutParameters.Width, MeasureSpecMode.Exactly),
MeasureSpec.MakeMeasureSpec(drawingCanvas.LayoutParameters.Height, MeasureSpecMode.Exactly));
drawingCanvas.Layout(0, 0, drawingCanvas.MeasuredWidth , drawingCanvas.MeasuredHeight);
Bitmap overAllDrawing = Bitmap.CreateBitmap(width, height, Bitmap.Config.Argb8888);
Canvas canvas = new Canvas(overAllDrawing);
drawingCanvas.Draw(canvas);
return overAllDrawing;
}
protected override void OnDraw(Canvas canvas)
{
base.OnDraw(canvas);
if (!IsImageReady)
{
return;
}
PointF xMin = ViewToSourceCoord (0f,0f) ;
PointF xMax = ViewToSourceCoord (metrics.WidthPixels, 0f);
PointF vPin;
float vX;
float vY;
foreach (Location location in locations)
{
if ( (location.X > xMin.X) && (location.X < xMax.X))
//&& (location.Y > yMin.Y) && (location.Y < yMax.Y) ) slows down performance
{
vPin = SourceToViewCoord (new PointF ((float)location.X, (float)location.Y));
vX = vPin.X - (pin.Width / 2);
vY = vPin.Y - pin.Height;
canvas.DrawBitmap (pin, vX, vY, paint);
}
}
if (sChar != null && character != null)
{
//draw character
PointF vChar = SourceToViewCoord (sChar);
float vCharX = vChar.X;
float vCharY = vChar.Y - character.Height;
canvas.DrawBitmap (character, vCharX, vCharY, paint);
}
if (pinPushed)
{
PointF vInfo = SourceToViewCoord ((float)selectedLocation.X, (float)selectedLocation.Y);
float vInfoX = vInfo.X - (info.Width / 2) + (int)ConvertDpToPix (7);//8 pixels cause image is not in the middle
float vInfoY = vInfo.Y - info.Height;
canvas.DrawBitmap (textBalloonBitmap, vInfoX, vInfoY, paint);
vInfo = null;
}
}