在地图框中添加标记时,可以在标记中添加自定义图标。我想知道我们是否可以膨胀视图(R.layout文件)而不是指定一个可绘制的图标。
以下是代码: -
public void onMapReady(MapboxMap mapboxMap) {
IconFactory iconFactory=IconFactory.getInstance(context);
for(int i=0;i<coordinates.size();i++){
mapboxMap.addMarker(new MarkerOptions()
.position(new LatLng(lat,longt))
.icon(iconFactory.fromResource(R.drawable.ic_location_green))
//can we inflate a view here instead of assigning a drawable image?
}
}
答案 0 :(得分:3)
我认为不可能
您可以做的是在运行时绘制自定义图标:
在Canvas
在运行时生成Drawable
(而不是创建xml,您可以创建一个对象。因此,如果您要键入<shape>
,则可以将其替换为新的Shape();
in爪哇)
生成一个视图并复制其位图(How to convert Views to bitmaps?)此选项仅提供它的外观 - 点击侦听器之类的东西将无效,因此我看不到选择此选项的原因
答案 1 :(得分:1)
这可以使用以下实用程序类:
/**
* Utility class to generate Bitmaps for Symbol.
* <p>
* Bitmaps can be added to the map with {@link com.mapbox.mapboxsdk.maps.MapboxMap#addImage(String, Bitmap)}
* </p>
*/
private static class SymbolGenerator {
/**
* Generate a Bitmap from an Android SDK View.
*
* @param view the View to be drawn to a Bitmap
* @return the generated bitmap
*/
public static Bitmap generate(@NonNull View view) {
int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
view.measure(measureSpec, measureSpec);
int measuredWidth = view.getMeasuredWidth();
int measuredHeight = view.getMeasuredHeight();
view.layout(0, 0, measuredWidth, measuredHeight);
Bitmap bitmap = Bitmap.createBitmap(measuredWidth, measuredHeight, Bitmap.Config.ARGB_8888);
bitmap.eraseColor(Color.TRANSPARENT);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
return bitmap;
}
}
可以找到集成此代码的完整示例here。请注意,此代码可以在后台线程上执行,因此您不需要阻止它的主线程。虽然我们没有公开二进制atm,但我们正在考虑围绕此代码创建一个小插件。可以找到here的功能请求。