Change marker size in Google Maps API v2
我正在尝试将我的应用程序移植到全新的Google Maps API v2,但找不到如何更改标记的大小(我的一些标记小于默认值)。
在v1中,我使用了
但是现在,在v2中,我不能使用
看参考文献,似乎不支持设置或更改
那么,我是否错过了一些东西,还是在此API版本中设置自定义标记的大小完全不可能?
您可以先将其转换为位图并更改其大小,然后将该位图用作自定义标记。例如,我首先创建了一个方法,该方法接受可绘制文件夹中图像文件的名称以及要设置的标记的宽度和高度。
1 2 3 4 5 | 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()方法中这样调用以创建所需大小的新标记。
1 2 3 4 | googleMap.addMarker(new MarkerOptions() .title("New Marker") .snippet("Check out this place.") .position(chelsea).icon(BitmapDescriptorFactory.fromBitmap(resizeMapIcons("image_name",100,100)))); |
我发现的最佳解决方案是在将
1 2 3 4 5 6 7 8 9 10 | 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)) ); |
这样,我可以继续使用
似乎唯一的方法是设置自定义标记图像。
摘自《 API参考》:如果您不仅要更改标记的颜色,还可以设置自定义标记图像,通常称为图标。自定义图标始终设置为
1 2 3 4 5 6 7 8 | 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%。
1 | Bitmap resizeBitmap = bitmapSizeByScall(originBitmap, 0.8f); |
一个对我有用的快速摘要:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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; } |