2017-05-15 70 views
1

我一直在關注如何爲谷歌地圖製作自定義標記,我已經得到了這部分的工作this tutorial。但是,爲了調整我在標記上使用的圖像的大小,我必須更改一些代碼。谷歌地圖圖像失真(Xamarin)

這是我使用的方法做調整:

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

一旦你有一個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)循環中反覆調用結果。

+0

謝謝!這就像一個魅力:)並感謝最優化技巧,一定會做到這一點! – mathkid91