我正在使用Android谷歌地图v2,带有自定义标记。 问题是它们在 mdpi 屏幕上工作正常,而在 hdpi 或 xhdpi 屏幕上它们显示太小。
我的标记来自资源(或来自服务器,通过HTTP),它们被设计为160 dpi位图,因此在解码之后我设置了它们的密度属性,如下面的简化代码示例所示:
InputStream inputStream = mAssetManager.open(filename); // Asset case
InputStream inputStream = connection.getInputStream(); // HTTP case
Bitmap icon = BitmapFactory.decodeStream(inputStream);
icon.setDensity(160);
当我将它们放在地图上时,我会执行以下操作:
BitmapDescriptor descriptor = BitmapDescriptorFactory.fromBitmap(icon);
Marker marker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(location.getLatitude(), location.getLongitude()))
.anchor(0.5f, 0.5f)
.icon(descriptor));
我希望,就像在v1地图库中一样,与屏幕密度相比,库会根据它们的密度来处理它们。但这似乎并没有发生。这是v2地图库的限制吗?在将它们放在地图上之前,我应该明确调整我的图标大小吗?
答案 0 :(得分:0)
所以最后我采用了随后的解决方案。
定义一个变量以保持显示密度:
protected int mDpi = 0;
在onCreate方法中,初始化它:
mDpi = getResources().getDisplayMetrics().densityDpi;
使用此方法根据显示密度调整图标大小:
protected Bitmap adjustImage(Bitmap image) {
int dpi = image.getDensity();
if (dpi == mDpi)
return image;
else {
int width = (image.getWidth() * mDpi + dpi / 2) / dpi;
int height = (image.getHeight() * mDpi + dpi / 2) / dpi;
Bitmap adjustedImage = Bitmap.createScaledBitmap(image, width, height, true);
adjustedImage.setDensity(mDpi);
return adjustedImage;
}
}
将dpi / 2添加到被除数的目的是计算一个圆形商,而不是截断的商。
希望它有所帮助!