【问题标题】:Skobbler Android - How to set a custom image in an annotation on a map?Skobbler Android - 如何在地图的注释中设置自定义图像?
【发布时间】:2014-06-19 10:21:12
【问题描述】:

如标题所示,我尝试将自己的图像放在地图上的注释中。 为此,我使用以下代码:

annotation.setImagePath (mImagePath);
annotation.setImageSize (4096);
annotation.setOffset (mSKScreenPoint));

没有错误但什么也没有出现。

但我遵循了文档的指示:

"Sets the absolute path of the image file to be added as an annotation. 
The picture must be a square image and the size must be a power of 2. 
_ (32x32, 64x64, etc.)."

我的图片大小是 64 * 64。

感谢这篇文章,我有了第一个迹象,但没有出现任何迹象:

How do I set a custom image on an map annotation?

所以我将图像转换为 png-24,但仍然没有结果。 (((

【问题讨论】:

  • mImagePath 应该是图像文件的绝对路径 - 对吗?
  • 请发送电子邮件至 dev@skobbler.com 并附上您尝试使用的图标以及您现在为 mImagePath 和 mSKScreenPoint 设置的值
  • 带有64px 图像的你应该将图像大小设置为64 而不是4096
  • 自定义图像在我这边也不起作用。这是我正在使用的图像:cl.ly/image/0l0T2n1B3O07(Photoshop 生成,64x64,24 位透明 PNG)SKAnnotation *annotation = [SKAnnotation annotation]; // 设置唯一 ID // 设置位置 annotation.imagePath = [[NSBundle mainBundle] pathForResource:@"purpleAlert" ofType:@"png"]; [self.mapView addAnnotation:annotation];没运气。什么都没有显示。

标签: android image annotations skmaps


【解决方案1】:

在 2.1.0 中,我们添加了对使用资源包中的图像的支持并扩展了完整路径图像的示例 - 这是更新后的 prepareAnnotations 代码:

更新:添加了对 2.2.0 的 customView 支持:

/**
 * Draws annotations on map
 */
private void prepareAnnotations() {

    // get the annotation object
    SKAnnotation annotation1 = new SKAnnotation();
    // set unique id used for rendering the annotation
    annotation1.setUniqueID(10);
    // set annotation location
    annotation1.setLocation(new SKCoordinate(-122.4200, 37.7765));
    // set minimum zoom level at which the annotation should be visible
    annotation1.setMininumZoomLevel(5);
    // set the annotation's type
    annotation1.setAnnotationType(SKAnnotation.SK_ANNOTATION_TYPE_RED);
    // render annotation on map
    mapView.addAnnotation(annotation1, SKAnimationSettings.ANIMATION_NONE);

    SKAnnotation annotation2 = new SKAnnotation();
    annotation2.setUniqueID(11);
    annotation2.setLocation(new SKCoordinate(-122.410338, 37.769193));
    annotation2.setMininumZoomLevel(5);
    annotation2.setAnnotationType(SKAnnotation.SK_ANNOTATION_TYPE_GREEN);
    mapView.addAnnotation(annotation2, SKAnimationSettings.ANIMATION_NONE);

    SKAnnotation annotation3 = new SKAnnotation();
    annotation3.setUniqueID(12);
    annotation3.setLocation(new SKCoordinate(-122.430337, 37.779776));
    annotation3.setMininumZoomLevel(5);
    annotation3.setAnnotationType(SKAnnotation.SK_ANNOTATION_TYPE_BLUE);
    mapView.addAnnotation(annotation3, SKAnimationSettings.ANIMATION_NONE);

    // add an annotation with an image file
    SKAnnotation annotation = new SKAnnotation();
    annotation.setUniqueID(13);
    annotation.setLocation(new SKCoordinate(-122.434516, 37.770712));
    annotation.setMininumZoomLevel(5);


    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    if (metrics.densityDpi < DisplayMetrics.DENSITY_HIGH) {
        // set the center point of the image - tapping on an annotation will
        // depend on
        // this value . Also the actual gps coordinates of the annotation
        // will
        // be in the center of the image.
        annotation.getOffset().setX(16);
        annotation.getOffset().setY(16);
        annotation.setImagePath(SKMaps.getInstance().getMapInitSettings().getMapResourcesPath()
                + "/.Common/poi_marker.png");
        // set the size of the image in pixels
        annotation.setImageSize(32);
    } else {
        // set the center point of the image - tapping on an annotation will
        // depend on
        // this value . Also the actual gps coordinates of the annotation
        // will
        // be in the center of the image.
        annotation.getOffset().setX(32);
        annotation.getOffset().setY(32);
        annotation.setImagePath(SKMaps.getInstance().getMapInitSettings().getMapResourcesPath()
                + "/.Common/poi_marker_retina.png");
        // set the size of the image in pixels
        annotation.setImageSize(64);

    }
    mapView.addAnnotation(annotation, SKAnimationSettings.ANIMATION_NONE);


    // add an annotation with a drawable resource
    SKAnnotation annotationDrawable = new SKAnnotation();
    annotationDrawable.setUniqueID(14);
    annotationDrawable.setLocation(new SKCoordinate(-122.437182, 37.777079));
    annotationDrawable.setMininumZoomLevel(5);
    // set the center point of the image - tapping on an annotation will
    // depend on
    // this value . Also the actual gps coordinates of the annotation will
    // be in the center of the image.
    annotationDrawable.setOffset(new SKScreenPoint(64, 64));
    SKAnnotationView annotationView = new SKAnnotationView();
    annotationView.setDrawableResourceId(R.drawable.icon_map_popup_navigate);
    // set the width and height of the image in pixels (they have to be
    // powers of 2)
    annotationView.setWidth(128);
    annotationView.setHeight(128);
    annotationDrawable.setAnnotationView(annotationView);
    mapView.addAnnotation(annotationDrawable, SKAnimationSettings.ANIMATION_NONE);


    // // add an annotation with a view
    SKAnnotation annotationFromView = new SKAnnotation();
    annotationFromView.setUniqueID(15);
    annotationFromView.setLocation(new SKCoordinate(-122.423573, 37.761349));
    annotationFromView.setMininumZoomLevel(5);
    annotationView = new SKAnnotationView();

    // set view object to be displayed as annotation
    annotationView.setView(customView);
    annotationFromView.setAnnotationView(annotationView);
    mapView.addAnnotation(annotationFromView, SKAnimationSettings.ANIMATION_NONE);


    selectedAnnotation = annotation1;
    // set map zoom level
    mapView.setZoom(13);
    // center map on a position
    mapView.centerMapOnPosition(new SKCoordinate(-122.4200, 37.7765));
}

【讨论】:

  • 你能给我一个例子来展示一个带有 SKAnnotationView 类的切割视图吗?
  • 我已经更新了 sn-p(作为参考,它与演示项目中的相同代码,MapActivity 类)
【解决方案2】:

如果您的图像是 64*64,则应将图像尺寸设置为 64。

annotation.setImageSize(64);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多