我正在尝试在基于位置的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);
但是,当您的应用程序在任何高密度设备上运行时,上述产品线的问题才会很好,并且在低密度设备上会大大缩放。
我面临的问题是标记图标没有根据不同的设备调整自身大小。
是否有更好的方法可以在谷歌地图中使用不同设备尺寸的图标?
非常感谢任何帮助..谢谢
答案 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);