单击标记时,会显示一个气球。但是在标记和气球之间有太大的空间,所以我怎么能减少这个距离?这就像在setBalloonBottomOffset
中使用V1 Google Map
方法。
我的custom balloon
就是这个班级:
public class CustomInfoWindowAdapter implements InfoWindowAdapter {
private final View mWindow;
private final View mContents;
public CustomInfoWindowAdapter(Activity activity) {
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mWindow = inflater.inflate(R.layout.ballon, null);
mContents = inflater.inflate(R.layout.ballon, null);
}
@Override
public View getInfoWindow(Marker marker) {
render(marker, mWindow);
return mWindow;
}
@Override
public View getInfoContents(Marker marker) {
render(marker, mContents);
return mContents;
}
private void render(Marker marker, View view) {
String title = marker.getTitle();
TextView titleUi = ((TextView) view.findViewById(R.id.txtTitle));
if (title != null) {
titleUi.setText(title);
} else {
titleUi.setText("");
}
String snippet = marker.getSnippet();
TextView snippetUi = ((TextView) view.findViewById(R.id.txtPlace));
if (snippet != null) {
snippetUi.setText(snippet);
} else {
snippetUi.setText("");
}
}
}
我显示了像
这样的标记marker.showInfoWindow();
我的气球xml是
<RelativeLayout
android:layout_width="250dp"
android:layout_height="75dp"
android:background="@drawable/ballon" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:orientation="vertical" >
<TextView
android:id="@+id/txtTitle"
style="@style/Ballon_Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:paddingLeft="15dp"
android:paddingRight="50dp"
android:paddingTop="10dp"
android:singleLine="true"
android:text="Con mis amigos amigos" />
<TextView
android:id="@+id/txtPlace"
style="@style/Ballon_Place"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:paddingBottom="20dp"
android:paddingLeft="15dp"
android:paddingRight="50dp"
android:singleLine="true"
android:text="Puerta del sol" />
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</RelativeLayout>
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:paddingRight="12dp"
android:paddingTop="18dp"
android:src="@drawable/icon_arrow" />
</RelativeLayout>
答案 0 :(得分:2)
地图标记默认为“锚定”在布局底部的中间位置(即锚点(0.5,1))。
您可以在创建标记时使用MarkerOptions.anchor更改定位点。
答案 1 :(得分:0)
您是否尝试在整个气球布局中使用负底边距?像这样:
<RelativeLayout
android:layout_width="250dp"
android:layout_height="75dp"
android:background="@drawable/ballon"
android:layout_marginBottom="-8dp" >
可能无法工作或导致内容在底部被切断,但仍然值得尝试作为最简单的方法。也许有另一种欺骗GoogleMap
类的方法,但很难弄清楚没有API的源代码。
另一个提示:您可能不需要getInfoContents()
方法 - 只需返回null
。只有从null
(see here)返回getInfoWindow()
时才会调用此方法 - 将您的内容视图合并到默认信息窗口中,这显然不是您的目标,因为您想移动气球周围。
因此,你也可以抛弃mContents
,它完全是多余的,只需要为你永远不会被使用的另一个膨胀的视图层次结构复制内存。
告诉我保证金是否适合您。我们可能也会在显示项目时尝试使用类似((View)mWindow.getParent())
之类的东西,但这样会比较棘手,所以我建议先尝试边距。
答案 2 :(得分:0)
这是一个古老的问题,当前的API有一个MarkerOptions.infoWindowAnchor方法可能会有所帮助。