我可以膨胀视图替换mapbox android中的图标吗?

时间:2017-11-03 12:54:17

标签: java android google-maps mapbox mapbox-android

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

            }

2 个答案:

答案 0 :(得分:3)

我认为不可能

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

  1. Canvas

  2. 上绘制
  3. 在运行时生成Drawable(而不是创建xml,您可以创建一个对象。因此,如果您要键入<shape>,则可以将其替换为新的Shape(); in爪哇)

  4. 生成一个视图并复制其位图(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的功能请求。