我的代码添加了一个自定义注释标注视图,只要在Skobbler mapview中选择了注释,就会显示该视图。
@Override
public void onAnnotationSelected(final SKAnnotation annotation) {
...
mapPopup = mapHolder.getCalloutView();
// set the callout view’s background color
mapPopup.setViewColor(Color.WHITE);
View view = getLayoutInflater().inflate(R.layout.map_callout, null);
...
mapPopup.setCustomView(view);
// setting 2nd parameter to 'true' will cause tail to be displayed
mapPopup.showAtLocation(annotation.getLocation(), true);
...
}
我还在showAtLocation()
调用中请求使用" tail"显示标注视图。 ImageView的。但是,当我在应用程序中测试时,我看到尾部出现在map_surface_holder
RelativeLayout容器的顶部,而不是显示callout弹出视图的FrameLayout容器的底部。
当我平移地图时,我可以看到尾部视图相对于标注视图的移动向左和向右移动,但它仍然与map_surface_holder容器的顶部对齐,从不向上或向下移动。
我是否需要在某处添加一些代码以使尾部图像视图知道它应该放置在RelativeLayout容器的y轴方向的哪个位置?
我确实尝试添加对mapPopup.setVerticalOffset(offset)
的调用以查看是否有任何效果,但尾部图像仍然锁定在屏幕顶部。
我在自定义标注视图和Skobbler提供的默认视图之间可以看到的另一个区别是标准视图是RelativeLayout容器,而我的实现是FrameLayout。但是,我不确定它是否重要,因为这里的Tail ImageView被添加到我的标注视图的父级,而不是作为孩子。
提前感谢您对此事的任何帮助,如果有任何其他详细信息有帮助,请与我们联系。
谢谢!
答案 0 :(得分:0)
我们试图用2.5.1和3.X重现这个问题 - 但我们无法解决。
以下是我们使用的代码:
//MapActivity
@Override
onCreate(Bundle savedInstanceState)
{
…
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mapPopup = mapViewGroup.getCalloutView();
View view = inflater.inflate(R.layout.layout_popup, null);
popupTitleView = (TextView) view.findViewById(R.id.top_text);
popupDescriptionView = (TextView) view.findViewById(R.id.bottom_text);
mapPopup.setCustomView(view);
…
}
@Override
public void onAnnotationSelected(final SKAnnotation annotation) {
if (navigationUI.getVisibility() == View.VISIBLE) {
return;
}
// show the popup at the proper position when selecting an
// annotation
int annotationHeight = 0;
float annotationOffset = annotation.getOffset().getY();
switch (annotation.getUniqueID()) {
case 10:
annotationHeight =(int) (64 * getResources().getDisplayMetrics().density);
popupTitleView.setText("Annotation using texture ID ");
popupDescriptionView.setText(null);
break;
case 11:
annotationHeight = customView.getHeight();
popupTitleView.setText("Annotation using custom view");
popupDescriptionView.setText(null);
break;
}
mapPopup.setVerticalOffset(-annotationOffset + annotationHeight / 2);
mapPopup.showAtLocation(annotation.getLocation(), true);
}
// layout_popup.xml
<ImageView
android:id="@+id/left_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:clickable="true"
android:padding="5dp"
android:src="@drawable/icon_map_popup_navigate" />
<LinearLayout
android:id="@+id/mid_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/left_image"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp"
android:weightSum="1" >
<TextView
android:id="@+id/top_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="Title text"
android:textColor="@color/black"
android:textSize="18dp"
android:textStyle="bold" />
<TextView
android:id="@+id/bottom_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:linksClickable="true"
android:text="Subtitle text"
android:textColor="@color/black"
android:textSize="14dp" />
</LinearLayout>