混合SKAnnotations customViews

时间:2015-12-11 12:30:48

标签: android skmaps

我无法将SKAnnotations重新添加到地图中。 该地图显示了印度2个城市的2个SKAnnotations:新德里和昌迪加尔(新德里的布局包含白色背景,而昌迪加尔只是一个带有TextView的新RelativeLayout)。 在几轮删除所有SKAnnotations然后重新添加它们之后,customViews会混淆。这是地图的样子:

2 Correct customView for each Annotation

以下是一些删除和重新添加后可能发生的情况: enter image description here

添加注释的代码:

public void addAnnotations() {
    SKAnnotation newDelhi = new SKAnnotation(444);
    newDelhi.setMininumZoomLevel(5);
    newDelhi.setAnnotationType(SKAnnotation.SK_ANNOTATION_TYPE_MARKER);
    SKAnnotationView newDelhiAnnotationView = new SKAnnotationView();
    RelativeLayout newDelhiCustomView =
            (RelativeLayout) ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
                    R.layout.annotation_layout, null, false);
    newDelhiCustomView.setTag("new delhi");
    newDelhiAnnotationView.setView(newDelhiCustomView);
    newDelhi.setAnnotationView(newDelhiAnnotationView);
    TextView newDelhiTextView = (TextView) newDelhiAnnotationView.getView().findViewById(R.id.annotation_textview);
    newDelhiTextView.setText("New Delhi");
    SKCoordinate newDelhiLocation = new SKCoordinate(77.179163, 28.619828);
    newDelhi.setLocation(newDelhiLocation);

    SKAnnotation chandigarh = new SKAnnotation(555);
    chandigarh.setMininumZoomLevel(5);
    chandigarh.setAnnotationType(SKAnnotation.SK_ANNOTATION_TYPE_MARKER);
    SKAnnotationView chandigahrAnnotationView= new SKAnnotationView();
    RelativeLayout chandigarhCustomView =
            new RelativeLayout(getActivity());
    chandigarhCustomView.setTag("chandigarh");
    TextView chandigarhTextView = new TextView(getActivity());    
    chandigarhTextView.setText("Chandigarh");
    chandigarhCustomView.addView(chandigarhTextView);
    chandigahrAnnotationView.setView(chandigarhCustomView);
    chandigarh.setAnnotationView(chandigahrAnnotationView);
    SKCoordinate chandigarhLocation = new SKCoordinate(76.778867,30.736094);
    chandigarh.setLocation(chandigarhLocation);

    String nd = (String)newDelhiAnnotationView.getView().getTag();
    String ch = (String)chandigahrAnnotationView.getView().getTag();

    mapView.addAnnotation(newDelhi, SKAnimationSettings.ANIMATION_NONE);
    mapView.addAnnotation(chandigarh, SKAnimationSettings.ANIMATION_NONE);
}

通过调用以下方式删除注释: mapView.deleteAllAnnotationsAndCustomPOIs();

在尝试处理这个问题大约一个星期之后,我已经完全失败了,TIA

1 个答案:

答案 0 :(得分:2)

这是以前版本的SDK(我认为< = 2.5.0)中的问题,其中SDK没有正确管理注释的ID(因此有时删除错误的注释)。

在2.5.1中,通过公开release notes属性修复了这个问题(显示在uniqueID中)。