谷歌地图图像扭曲(Xamarin)

时间:2017-05-15 21:16:18

标签: c# android google-maps xamarin xamarin.android

我一直在关注如何为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);
        }

    }

这是一张关于它看起来如何的照片: lol waht i tyep hrer

在原始代码中,我会做这样的事情

var img = BitmapDescriptorFactory.FromResource(Resource.Drawable.icon);

这很有效。但是我想调整图像的大小,所以我找到了一种的方法来做到这一点。

知道发生了什么事吗?

1 个答案:

答案 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);

注意:请确保您的位图RecycleDispose以避免内存泄漏。

注意BitmapFactory的DecodeResourceCreateScaledBitmap是大量的API调用,您可能希望缓存结果,而不是在foreach (var pin in customPins)循环中反复调用它们。