2013-02-13 24 views
27

新しいGoogle Maps API v2にアプリを移植しようとしていますが、マーカーのサイズを変更する方法が見つかりません(マーカーの一部がデフォルトよりも小さい)。Google Maps API v2のマーカーサイズを変更する

v1では、マップに追加する前にsetBounds()と縮尺したDrawableを使用しました。

今、v2ではDrawableを使用できません。私はMarkerOptions().icon()を使用しましたが、これはBitmapDescriptorBitmapDescriptorFactoryで生成)だけです。

参考文献を見ると、BitmapDescriptorサイズの設定や変更はサポートされていないようです。

このAPIバージョンでカスタムマーカーのサイズを設定するのは何か不足ですか?

+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); 

の描画イメージのサイズを変更します。より小さな 'Bitmap'を使うと、' Drawable'を 'Bitmap'に変換してそれを' Marker'として追加する前にスケールすると、 'Drawable'のメリットとともに小さなマーカーが得られます。私はシステムが私にそれを(私はかなり新しくて、自分自身に答える前に数時間待たなければならない時に)例を投稿します:-))。 – jesjimher

答えて

6

それを行う唯一の方法は、カスタムマーカー画像を設定することです。

投稿者API Reference:マーカーの色だけでなく、それ以外のものを変更したい場合は、アイコンと呼ばれるカスタムマーカー画像を設定できます。カスタムアイコンは常にBitmapDescriptorとして設定され、BitmapDescriptorFactoryクラスの4つの方法のいずれかを使用して定義されます。

+1

あなたが正しいですが、私が小さいビットマップ(低解像度のPNG)を使用すると、マーカーも小さくなります。私たちは 'Drawable'を直接使うことはできませんが、うまくいきます。ありがとう! – jesjimher

+0

あなたは大歓迎です:) マーカにテキストを描きたいときに同じ問題に直面しました。 –

16

最高の解決策は、として追加する直前にBitmapのサイズを変更することです。たとえば、私のコードでは、Drawableを複数参照する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)) 
     ); 

この方法で、私はちょうどBitmapに変換し、必要に応じてリサイズ異なるサイズのマーカーを得ることができていながらDrawables使用し続けることができます。

+17

java.lang.ClassCastException:android.graphics.drawable.BitmapDrawableをandroid.graphics.drawable.LevelListDrawableにキャストすることはできません –

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

あなたが最初のビットマップに変換し、そのサイズを変更してカスタムマーカーとしてのそれのビットマップを使用することができます。たとえば、私は最初に、drawableフォルダ内の画像ファイルの名前と、設定したいマーカーの幅と高さを受け入れるメソッドを作成しました。

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

0

マーカーアイコン解決

map.addMarker(new MarkerOptions() 
       .position(POSITION) 
       .title("Your title") 
       .icon(BitmapDescriptorFactory.fromBitmap(smallMarker)) 
       ); 
関連する問題