如何在Google Map V2中的标记中偏移气球视图?

时间:2013-02-14 15:45:27

标签: android android-maps-v2

单击标记时,会显示一个气球。但是在标记和气球之间有太大的空间,所以我怎么能减少这个距离?这就像在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>

3 个答案:

答案 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。只有从nullsee here)返回getInfoWindow()时才会调用此方法 - 将您的内容视图合并到默认信息窗口中,这显然不是您的目标,因为您想移动气球周围。 因此,你也可以抛弃mContents,它完全是多余的,只需要为你永远不会被使用的另一个膨胀的视图层次结构复制内存。

告诉我保证金是否适合您。我们可能也会在显示项目时尝试使用类似((View)mWindow.getParent())之类的东西,但这样会比较棘手,所以我建议先尝试边距。

答案 2 :(得分:0)

这是一个古老的问题,当前的API有一个MarkerOptions.infoWindowAnchor方法可能会有所帮助。