2

在 mapbox 中添加标记时,可以向标记添加自定义图标。我想知道我们是否可以扩展视图(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?
                }

            }
4

2 回答 2

3

我不认为这是可能的

您可以做的是在运行时绘制自定义图标:

  1. 画上去Canvas

  2. 在运行时生成Drawable(而不是创建 xml,您可以创建一个对象。因此,如果您要键入,您可以用Java<shape>中的 new 替换它)Shape();

  3. 生成一个视图并复制它的位图(如何将视图转换为位图?)这个选项只会提供它的外观 - 点击监听器之类的东西不起作用,因此我看不出选择这个选项的理由

于 2017-11-03T13:05:25.667 回答
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;
    }
  }

可以在此处找到集成此代码的完整示例。请注意,此代码可以在后台线程上执行,因此您无需为此阻塞主线程。虽然我们不公开二进制 atm,但我们正在考虑围绕此代码创建一个小插件。它的功能请求可以在这里找到。

于 2017-11-04T10:41:46.217 回答