在Google Maps API v2中更改标记大小

jes*_*her 30 android android-maps-v2

我正在尝试将我的应用移植到全新的Google Maps API v2,但无法找到如何更改标记的大小(我的某些标记小于默认值).

在v1中,我使用了DrawablesetBounds()在将其添加到地图之前缩放的内容.

但现在,在v2中,我无法使用Drawable.我要使用MarkerOptions().icon(),只需要一个BitmapDescriptor(用a生成BitmapDescriptorFactory).

查看参考资料,似乎没有任何支持设置或更改BitmapDescriptor大小.

那么,我错过了什么,或者在这个API版本中设置自定义标记的大小根本不可能?

小智 50

您可以先将其转换为位图并更改其大小,然后将该位图用作自定义标记.例如,我首先创建了一个方法,该方法接受可绘制文件夹中图像文件的名称,以及要设置的标记的宽度和高度.

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;
}
Run Code Online (Sandbox Code Playgroud)

然后在setUpMap()方法中调用此方法来创建所需大小的新标记.

googleMap.addMarker(new MarkerOptions()
            .title("New Marker")
            .snippet("Check out this place.")
            .position(chelsea).icon(BitmapDescriptorFactory.fromBitmap(resizeMapIcons("image_name",100,100))));
Run Code Online (Sandbox Code Playgroud)


jes*_*her 17

我发现的最佳解决方案是Bitmap在将其添加为之前调整大小Marker.例如,在我的代码中,我使用了一个LevelListDrawable引用多个分辨率Drawable的代码.由于我想要半尺寸标记,我这样做:

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))
        );
Run Code Online (Sandbox Code Playgroud)

这样,我可以继续使用,Drawables同时能够获得不同大小的标记,只需将它们转换Bitmap为根据需要调整大小.

  • java.lang.ClassCastException:android.graphics.drawable.BitmapDrawable无法强制转换为android.graphics.drawable.LevelListDrawable (18认同)

Chr*_*nis 6

似乎唯一的方法是设置自定义标记图像.

来自API参考:如果您想要更改的不仅仅是标记的颜色,您可以设置自定义标记图像,通常称为图标.自定义图标始终设置为a BitmapDescriptor,并使用BitmapDescriptorFactory类中的四种方法之一进行定义.


ami*_*ron 6

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;
}
Run Code Online (Sandbox Code Playgroud)

位图大小恢复为原始大小的 80%。

Bitmap resizeBitmap = bitmapSizeByScall(originBitmap, 0.8f);
Run Code Online (Sandbox Code Playgroud)