Android谷歌地图v2上的小自定义标记

时间:2013-05-30 05:56:23

标签: android

我正在使用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地图库的限制吗?在将它们放在地图上之前,我应该明确调整我的图标大小吗?

1 个答案:

答案 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添加到被除数的目的是计算一个圆形商,而不是截断的商。

希望它有所帮助!