Google地图标记在不同设备上展开

时间:2015-01-07 22:27:31

标签: android google-maps google-maps-markers

我正在尝试在基于位置的Android应用程序中使用自定义图标作为标记,并在不同设备中调整自身大小。

我为该图标设置了4种不同尺寸(drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxhdpi),并在不同的可绘制文件夹中进行节奏。

我使用简单的代码来使用该图标。

Bitmap mIconBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.some_icon);

marker = map.addMarker(new MarkerOptions()
                                .position(pinOfferLocation)
                                .title("Some Title")
                                .icon(BitmapDescriptorFactory
                                        .fromBitmap(mIconBitmap))
                                .snippet("Some Snippet").anchor(0.5f, 1));

我也尝试过使用:

BitmapDescriptorFactory.fromResources(SOME DRAWABLE RESOURCE)

我尝试的另一个选项是创建一个像这样的缩放位图:

Bitmap resized = Bitmap.createScaledBitmap(mIconBitmap, 70, 90, true);

但是,当您的应用程序在任何高密度设备上运行时,上述产品线的问题才会很好,并且在低密度设备上会大大缩放。

我面临的问题是标记图标没有根据不同的设备调整自身大小。

是否有更好的方法可以在谷歌地图中使用不同设备尺寸的图标?

非常感谢任何帮助..谢谢

1 个答案:

答案 0 :(得分:3)

我想我遇到了类似的问题。我使用了这种解决方法,即使它不是很漂亮。

我使用此方法从asset-folder加载位图:

public static Bitmap getBitmapFromAsset(Context context, String strName,
        int sampleFactor) {
    AssetManager assetManager = context.getAssets();

    InputStream istr;
    Bitmap bitmap = null;
    try {
        Options opt = new Options();
        opt.inSampleSize = sampleFactor;    // IMPORTANT PART
        istr = assetManager.open(strName);
        bitmap = BitmapFactory.decodeStream(istr, null, opt);
    } catch (IOException e) {
        return null;
    }

    return bitmap;
}

可以使用以下内容提取样本因子:

    DisplayMetrics metrics = new DisplayMetrics();

    // not sure if this is just testing or necessary for metrics
    getActivity().getWindowManager().getDefaultDisplay()
            .getMetrics(metrics);

    // factor (adjust in your app)
    int sampleFactorDensity = Math.round(960 / metrics.densityDpi);

    currPosMarker = MyTools.getBitmapFromAsset(this.getActivity(),
            "marker_azure.png", sampleFactorDensity);