2013-02-13 99 views
27

我試圖將我的應用移植到全新的Google Maps API v2,但無法找到如何更改標記的大小(我的一些標記比默認值小)。更改Google Maps API v2中的標記大小

在v1中,我使用了一個Drawable,我在將其添加到地圖之前使用setBounds()進行縮放。

但現在,在v2中,我無法使用Drawable。我必須使用MarkerOptions().icon(),它只需要一個BitmapDescriptor(由BitmapDescriptorFactory生成)。

看看參考文獻,似乎沒有任何設置或更改尺寸的支持。

那麼,我是否遺漏了一些東西,或者在這個API版本中設置自定義標記的大小根本不可能?

+0

。如果我使用較小的「位圖」,或者將「Drawable」轉換爲「位圖」並在將其添加爲「標記」之前對其進行縮放,則會得到一個更小的標記,並具有「可繪製」的所有優點。當系統允許我這樣做時,我會發佈一個示例(我很新,而且我必須等待幾個小時才能回答自己:-))。 – jesjimher 2013-02-13 11:50:36

回答

6

它似乎是唯一的方法來做到這一點是通過設置自定義標記圖像。

API Reference:如果您不想改變標記的顏色,可以設置自定義標記圖像,通常稱爲圖標。自定義圖標始終設置爲BitmapDescriptor,並使用BitmapDescriptorFactory類中的四種方法之一進行定義。

+1

你說得對,如果我使用較小的位圖(較低分辨率的PNG),標記也會變小。只是一個恥辱,我們不能直接使用'Drawable's,但它的工作原理。謝謝! – jesjimher 2013-02-13 11:23:32

+0

不客氣:) 當我想在我的標記上繪製文字時,我遇到了同樣的問題。 – 2013-02-13 11:28:33

16

我發現的最佳解決方案是在將其作爲Marker添加之前調整其大小Bitmap。例如,在我的代碼中,我使用了一個參考幾個多分辨率Drawable s的LevelListDrawable。因爲我想一半大小的標記,我做的:

LevelListDrawable d=(LevelListDrawable) getResources().getDrawable(R.drawable.estado_variable); 
d.setLevel(1234); 
BitmapDrawable bd=(BitmapDrawable) d.getCurrent(); 
Bitmap b=bd.getBitmap(); 
Bitmap bhalfsize=Bitmap.createScaledBitmap(b, b.getWidth()/2,b.getHeight()/2, false); 
mapa.addMarker(new MarkerOptions() 
     .position(POSITION) 
     .title("Title") 
     .icon(BitmapDescriptorFactory.fromBitmap(bhalfsize)) 
     ); 

這樣一來,我可以繼續使用Drawables而能夠獲得不同大小的標誌物只是將它們轉換爲Bitmap,並根據需要調整。

+17

java.lang.ClassCastException:android.graphics.drawable.BitmapDrawable無法轉換爲android.graphics.drawable.LevelListDrawable – 2013-06-22 10:52:08

1

只是一個快速的片段,對我的作品:

private Bitmap scaleImage(Resources res, int id, int lessSideSize) { 
    Bitmap b = null; 
    BitmapFactory.Options o = new BitmapFactory.Options(); 
    o.inJustDecodeBounds = true; 

    BitmapFactory.decodeResource(res, id, o); 

    float sc = 0.0f; 
    int scale = 1; 
    // if image height is greater than width 
    if (o.outHeight > o.outWidth) { 
     sc = o.outHeight/lessSideSize; 
     scale = Math.round(sc); 
    } 
    // if image width is greater than height 
    else { 
     sc = o.outWidth/lessSideSize; 
     scale = Math.round(sc); 
    } 

    // Decode with inSampleSize 
    BitmapFactory.Options o2 = new BitmapFactory.Options(); 
    o2.inSampleSize = scale; 
    b = BitmapFactory.decodeResource(res, id, o2); 
    return b; 
} 
39

您可以先將其轉換成位圖,並改變它的大小,然後使用該位圖作爲自定義標記。例如,我首先創建了一個方法,它接受可繪製文件夾中圖像文件的名稱,以及要設置的標記的寬度和高度。

public Bitmap resizeMapIcons(String iconName,int width, int height){ 
    Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(),getResources().getIdentifier(iconName, "drawable", getPackageName())); 
    Bitmap resizedBitmap = Bitmap.createScaledBitmap(imageBitmap, width, height, false); 
    return resizedBitmap; 
} 

然後在setUpMap()方法中調用此方法,以創建所需大小的新標記。

googleMap.addMarker(new MarkerOptions() 
      .title("New Marker") 
      .snippet("Check out this place.") 
      .position(chelsea).icon(BitmapDescriptorFactory.fromBitmap(resizeMapIcons("image_name",100,100)))); 
2
public Bitmap bitmapSizeByScall(Bitmap bitmapIn, float scall_zero_to_one_f) { 

    Bitmap bitmapOut = Bitmap.createScaledBitmap(bitmapIn, 
      Math.round(bitmapIn.getWidth() * scall_zero_to_one_f), 
      Math.round(bitmapIn.getHeight() * scall_zero_to_one_f), false); 

    return bitmapOut; 
} 

位圖大小恢復到原來的80%。

Bitmap resizeBitmap = bitmapSizeByScall(originBitmap, 0.8f); 
+0

示例:mBitmap width = 100,則位圖asdas width = 80。 – amiron 2016-07-15 12:57:16

0

調整標記

int height = 80; 
int width = 60; 
BitmapDrawable bitmapdraw=(BitmapDrawable)getResources().getDrawable(R.mipmap.marker); 
Bitmap b=bitmapdraw.getBitmap(); 
Bitmap smallMarker = Bitmap.createScaledBitmap(b, width, height, false); 

的可繪製的圖像使用該位圖中解決的標記圖標

map.addMarker(new MarkerOptions() 
       .position(POSITION) 
       .title("Your title") 
       .icon(BitmapDescriptorFactory.fromBitmap(smallMarker)) 
       ); 
相關問題