gpt4 book ai didi

安卓谷歌地图API V2 : Open Custom Info Window on Right Side of Marker

转载 作者:IT老高 更新时间:2023-10-28 22:03:38 25 4
gpt4 key购买 nike

我已经集成了适用于 Android 的 Google MAP API V2。我想在我的标记的 Onclick 上有一个自定义信息窗口。到此为止还好。我已经整合了它。

我想要什么:我想在标记的右侧而不是标记的顶部显示我的自定义信息窗口。

以下是我正在使用的代码:

public class MainActivity extends FragmentActivity {

private MainMapFragement mapFragment;
private HashMap<Marker, EventInfo> eventMarkerMap;


Marker ThirdMarker;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapFragment = new MainMapFragement();
// FragmentTransaction ft = getFragmentManager().beginTransaction();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.map, mapFragment);
ft.commit();

}

@Override
protected void onStart() {
super.onStart();
setUpEventSpots();
}

private void setUpEventSpots() {
// I'm going to make 2 EventInfo objects and place them on the map
EventInfo firstEventInfo = new EventInfo(new LatLng(50.154, 4.35),
"Right now - event", new Date(), "Party");
EventInfo secondEventInfo = new EventInfo(new LatLng(51.25, 4.15),
"Future Event", new Date(1032, 5, 25), "Convention");

EventInfo thirdEventInfo = new EventInfo(new LatLng(23.25, 72.15),
"Our Next Event", new Date(), "Ahmedabad-India");
// this date constructor is deprecated but it's just to make a simple
// example

Marker firstMarker = mapFragment.placeMarker(firstEventInfo);
Marker secondMarker = mapFragment.placeMarker(secondEventInfo);
ThirdMarker = mapFragment.placeMarker(thirdEventInfo);
eventMarkerMap = new HashMap<Marker, EventInfo>();
eventMarkerMap.put(firstMarker, firstEventInfo);
eventMarkerMap.put(secondMarker, secondEventInfo);
eventMarkerMap.put(ThirdMarker, thirdEventInfo);

// add the onClickInfoWindowListener
mapFragment.getMap().setOnInfoWindowClickListener(
new OnInfoWindowClickListener() {

@Override
public void onInfoWindowClick(Marker marker) {
EventInfo eventInfo = eventMarkerMap.get(marker);
Toast.makeText(
getBaseContext(),
"The date of "
+ eventInfo.getName()
+ " is "
+ eventInfo.getSomeDate()
.toLocaleString(),
Toast.LENGTH_LONG).show();

}
});



// Custom Bhavesh
mapFragment.getMap().setInfoWindowAdapter(new InfoWindowAdapter() {

private final View window = getLayoutInflater().inflate(
R.layout.ballonoverlly, null);

@Override
public View getInfoWindow(Marker marker) {
EventInfo eventInfo = eventMarkerMap.get(marker);

String title = marker.getTitle();
TextView txtTitle = ((TextView) window
.findViewById(R.id.textview_name));
if (title != null) {
// Spannable string allows us to edit the formatting of the
// text.
SpannableString titleText = new SpannableString(title);
titleText.setSpan(new ForegroundColorSpan(Color.RED), 0,
titleText.length(), 0);
txtTitle.setText(titleText);
} else {
txtTitle.setText("");
}

// TextView txtType = ((TextView) window
// .findViewById(R.id.textview_aboutme));
// if (eventInfo.getType() != null)
// txtType.setText(eventInfo.getType());

return window;
}

@Override
public View getInfoContents(Marker marker) {
// this method is not called if getInfoWindow(Marker) does not
// return null
return null;
}
});
}

}

xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RlMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >


<LinearLayout
android:id="@+id/imageview_comment"
android:layout_width="150dp"
android:layout_height="62dp"
android:background="@drawable/map_comment_back"
android:gravity="center_vertical"
android:orientation="vertical"
android:scaleType="fitXY"
android:visibility="visible" >

<TextView
android:id="@+id/textview_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:text="Bhavesh Patadiya"
android:textColor="#FFFFFF"
android:textStyle="bold" />

<TextView
android:id="@+id/textview_aboutme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:maxLines="2"
android:text="How&apos;s Going?"
android:textColor="#FFFFFF"
android:textStyle="normal" />
</LinearLayout>
</LinearLayout>

以下是我得到的屏幕截图: enter image description here

现在,我想让我的自定义信息窗口位于标记的右侧而不是顶部。

感谢所有帮助。

提前致谢。

最佳答案

编辑 2:

从 9 月开始更新(v12 或 3.2.65)Google Maps Android API v2 MarkerOptions.infoWindowAnchor加入。新增功能不少,请查看release notes也是。

编辑 3:

很遗憾,此添加还不能解决您的问题。已添加 new issue为此。


目前无法实现。

如果不允许用户移动 map ,尝试通过在 MapFragment 上放置 View 来解决此问题可能是一个很好的解决方案。如果可以的话,在使用“推送技术”onCameraChange 或使用 Handlermap.getCameraPosition() 进行轮询时,您会看到重新定位的一些严重滞后>.

如果您尝试使用带有透明图标的附加标记来在单击可见时显示信息窗口,则会出现同样的问题,但看到它实际实现会更有趣。

如果你现在可以在没有右侧信息窗口的情况下生活,我建议主演 this feature already requested并等待。

编辑:

从 API v2 的 3.1.36(修订版 7)开始,您可以更改标记的图标。这意味着您可以制作两个图标:一个是普通图标,另一个看起来像是在右侧打开了一个信息窗口。禁用打开默认信息窗口并改用它可能对您有用。

关于安卓谷歌地图API V2 : Open Custom Info Window on Right Side of Marker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16357904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com