0

我正在使用带有自定义标记的 android google maps v2。问题是它们在mdpi屏幕上工作正常,而在hdpixhdpi屏幕上它们显得太小了

我的标记来自资产(或来自服务器,通过 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地图库的限制吗?我应该在将图标放在地图上之前明确调整它们的大小吗?

4

1 回答 1

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 添加到被除数的目的是计算四舍五入的商,而不是截断的商。

希望能帮助到你!

于 2013-06-05T09:33:08.240 回答