0

С этого момента я не могу получить ключ API для карт V1, мне нужно перенести мой код на v2. Так что мне нужно, когда пользователь нажимает на один вывод на карте, чтобы отобразить диалоговое окно (содержащее имя точки и кнопку). Если он нажимает на кнопку, я открываю новое действие, которое отображает информацию об этом месте. Я успешно сделал это с наложениями карт, которые передал свои пользовательские данные в конструкторе, и у меня есть все, что мне нужно. Но как это можно сделать с помощью маркеров для карт v2? Я ничего не могу найти о пользовательских диалогах.Android google maps v2 custom dilog

+0

Если у вас есть приложение и ключ для v1, вы все равно можете использовать его. Вам не нужно «мигрировать». –

+0

Нет, для этого сертификата у меня нет ключа. Это для нового клиента, и я создал новый сертификат (я не могу дать свой предыдущий). – Panos

ответ

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; 

      } 
     }); 
0

Пользовательский диалог и сама карта представляют собой две совершенно отдельные сущности, и развитие одного не влияет на развитие другого.

Вы будете использовать OnMarkerClickListener (here the link to the docs), и всякий раз, когда вы получаете это, вы даже создадите свой настраиваемый диалог так же, как раньше.

0

вы можете добавить маркер, используя

Marker marker = mMap.addMarker(new MarkerOptions().position(pos1).title("title").snippet("description")); 

, если нажать на маркер, информационное окно откроется, с «Название» и «Описание», даже вы можете настроить это информационное окно, расширяя класс InfoWindowAdapter, а затем установите этот infoWindowAdapter в GoogleMap obj. для получения дополнительной информации plz см. ниже ссылку Google Map API V2