由于现在我无法获得地图 V1 的 API 密钥,我需要将我的代码迁移到 v2。所以我需要的是当用户点击地图上的一个大头针以显示一个对话框(其中包含点的名称和一个按钮)。如果他点击按钮,我会打开一个显示该地点信息的新活动。我已经使用地图覆盖成功地做到了这一点,我在构造函数中传递了我的自定义数据,并且我拥有了我需要的一切。但是如何使用地图 v2 的标记来完成呢?我找不到有关自定义对话框的任何信息。
问问题
1182 次
3 回答
0
无法InfoWindow
使用按钮来实现,因为Google Map
它会自动将其所有内容呈现到图像中。您唯一可以听到的点击是InfoWindow
它自己。
这是用于创建InfoWindow
和分配的代码,OnInfoWindowClickListener
其中包含将向您解释这些步骤的注释。
// Setting a custom info window adapter for the google map
map.setInfoWindowAdapter(new InfoWindowAdapter() {
// Use default InfoWindow frame
@Override
public View getInfoWindow(Marker args) {
return null;
}
// Defines the contents of the InfoWindow
@Override
public View getInfoContents(Marker args) {
// Getting view from the layout file info_window_layout
View v = getLayoutInflater().inflate(R.layout.info_window_layout, null);
// Getting the position from the marker
clickMarkerLatLng = args.getPosition();
TextView title = (TextView) v.findViewById(R.id.tvTitle);
title.setText(args.getTitle());
//Setting OnInfoWindowClickListener
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
public void onInfoWindowClick(Marker marker)
{
if (SGTasksListAppObj.getInstance().currentUserLocation!=null)
{
if (String.valueOf(SGTasksListAppObj.getInstance().currentUserLocation.getLatitude()).substring(0, 8).contains(String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)) &&
String.valueOf(SGTasksListAppObj.getInstance().currentUserLocation.getLongitude()).substring(0, 8).contains(String.valueOf(clickMarkerLatLng.longitude).substring(0, 8)))
{
Toast.makeText(getApplicationContext(), "This your current location, navigation is not needed.", Toast.LENGTH_SHORT).show();
}
else
{
FlurryAgent.onEvent("Start navigation window was clicked from daily map");
tasksRepository = SGTasksListAppObj.getInstance().tasksRepository.getTasksRepository();
for (Task tmptask : tasksRepository)
{
String tempTaskLat = String.valueOf(tmptask.getLatitude());
String tempTaskLng = String.valueOf(tmptask.getLongtitude());
Log.d(TAG, String.valueOf(tmptask.getLatitude())+","+String.valueOf(clickMarkerLatLng.latitude).substring(0, 8));
if (tempTaskLat.contains(String.valueOf(clickMarkerLatLng.latitude).substring(0, 8)) && tempTaskLng.contains(String.valueOf(clickMarkerLatLng.longitude).substring(0, 8)))
{
task = tmptask;
break;
}
}
Intent intent = new Intent(getApplicationContext() ,RoadDirectionsActivity.class);
intent.putExtra(TasksListActivity.KEY_ID, task.getId());
startActivity(intent);
}
}
else
{
Toast.makeText(getApplicationContext(), "Your current location could not be found,\nNavigation is not possible.", Toast.LENGTH_SHORT).show();
}
}
});
// Returning the view containing InfoWindow contents
return v;
}
});
于 2013-04-22T08:40:04.000 回答
0
自定义对话框和地图本身是两个完全独立的实体,一个的发展不会影响另一个的发展。
您将使用 OnMarkerClickListener(此处是文档的链接),并且无论何时收到该消息,您都将像以前一样创建自定义对话框。
于 2013-04-22T08:43:14.787 回答
0
您可以使用添加标记
Marker marker = mMap.addMarker(new MarkerOptions().position(pos1).title("title").snippet("description"));
如果您点击标记,将打开一个带有“标题”和“描述”的信息窗口,即使您可以通过扩展 InfoWindowAdapter 类来自定义此信息窗口,然后将该 infoWindowAdapter 设置为 GoogleMap obj。有关更多信息,请参阅下面的链接 Google Map API V2
于 2013-04-22T08:46:34.543 回答