我一直在关注如何为Google地图制作自定义标记this tutorial,我已经让这部分工作了。但是,我必须更改一些代码才能调整我在标记上使用的图像的大小。
这是我用来调整大小的方法:
private void UpdateMarkers(float zoom)
{
// Max zoom out => zoom = 3
// Max zoom in => zoom = 21
int dimension = (int)zoom * 10;
if (dimension == currentDimension)
return;
currentDimension = dimension;
map.Clear();
foreach (var pin in customPins)
{
var immutableBitmap = BitmapFactory.DecodeResource(Context.Resources, Resource.Drawable.icon);
var mutableBitmap = immutableBitmap.Copy(Bitmap.Config.Argb8888, true);
mutableBitmap.Height = dimension;
mutableBitmap.Width = dimension;
BitmapDescriptorFactory.FromBitmap(mutableBitmap);
var img = BitmapDescriptorFactory.FromBitmap(mutableBitmap);
var marker = new MarkerOptions();
marker.SetPosition(new LatLng(pin.Pin.Position.Latitude, pin.Pin.Position.Longitude));
marker.SetTitle(pin.Pin.Label);
marker.SetSnippet(pin.Pin.Address);
marker.SetIcon(img);
map.AddMarker(marker);
}
}
在原始代码中,我会做这样的事情
var img = BitmapDescriptorFactory.FromResource(Resource.Drawable.icon);
这很有效。但是我想调整图像的大小,所以我找到了一种的方法来做到这一点。
知道发生了什么事吗?
答案 0 :(得分:1)
获得Bitmap
后,您可以通过Bitmap.CreateScaledBitmap
:
var bitmap = BitmapFactory.DecodeResource(Context.Resources, Resource.Drawable.icon);
var scaledBitmap = Bitmap.CreateScaledBitmap(bitmap, dimension, dimension, false);
var img = BitmapDescriptorFactory.FromBitmap(scaledBitmap);
注意:请确保您的位图Recycle
和Dispose
以避免内存泄漏。
注意BitmapFactory的DecodeResource
和CreateScaledBitmap
是大量的API调用,您可能希望缓存结果,而不是在foreach (var pin in customPins)
循环中反复调用它们。