10

Я разрабатываю в google maps APIv2. Проблема, с которой я сейчас сталкиваюсь, - это только одно слово в инфо окнах/фрагменте. Но вывод, который я хочу, может отображать в форме линии прерывания, как показано ниже. Так есть ли какие-либо возможные способы его решения?Несколько строк или строк разрыва в .snippet (google maps apiv2)

Пример:

координат: 03,05085, 101,70506

Ограничение скорости: 80 км/ч

public class MainActivity extends FragmentActivity { 
    static final LatLng SgBesi = new LatLng(03.05085, 101.76022); 
    static final LatLng JB = new LatLng(1.48322, 103.69065); 
    private GoogleMap map; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
      .getMap(); 

    map.addMarker(new MarkerOptions().position(SgBesi) 
     .title("KM D7.7 Sungai Besi")    //name 
     .snippet("Coordinate: 03.05085, 101.70506")); //description 

    map.addMarker(new MarkerOptions().position(JB) 
     .title("test") 
     .snippet("Hey, how are you?")); 

     // .icon(BitmapDescriptorFactory //set icon 
     //  .fromResource(R.drawable.ic_launcher))); 

    // move the camera instantly with a zoom of 15. 
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(SgBesi, 15)); 

    // zoom in, animating the camera.  
    map.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null); 
    } 
} 
+0

после того, как я прошел через число подобных примеров, как приведенный выше код, я все еще не могу решить свою проблему. Я плохо разбираюсь в программировании и не понимаю, как я должен указать конкретное местоположение с настраиваемым infowindow. Большинство примеров, которые я тестировал, не указали конкретное местоположение. Может ли кто-нибудь отправить полное кодирование для меня? Я буду очень признателен, если кто-нибудь сможет помочь мне решить часть моего выпускного проекта, который я тестировал в течение 3 дней. Большое спасибо. –

ответ

0

Вы должны будете использовать InfoWindowAdapter создавать собственные информационные окна. Реализация по умолчанию каким-то образом удаляет новые строки из фрагмента, что может считаться незначительной ошибкой.

19

Вам необходимо использовать custom InfoWindowAdapter, чтобы изменить макет InfoWindow на пользовательский дизайн, определенный с помощью файла макета. В основном вам нужно:

  1. Объявите вашу функцию, используя GoogleMap.setInfoWindowAdapter(Yourcustominfowindowadpater)
  2. есть класс, как показано ниже:

...

class Yourcustominfowindowadpater implements InfoWindowAdapter { 
    private final View mymarkerview; 

    Yourcustominfowindowadpater() { 
     mymarkerview = getLayoutInflater() 
      .inflate(R.layout.custominfowindow, null); 
    } 

    public View getInfoWindow(Marker marker) {  
     render(marker, mymarkerview); 
     return mymarkerview; 
    } 

    public View getInfoContents(Marker marker) { 
     return null; 
    } 

    private void render(Marker marker, View view) { 
     // Add the code to set the required values 
     // for each element in your custominfowindow layout file 
    } 
} 
+0

ok, я найду его, спасибо за руководство :) –

+0

Будут ли кнопки в этих информационных окнах работать, если я добавляю слушателей? – PSIXO

+1

@PSIXO: Нет, кнопки не будут работать. Из [docs] (https://developers.google.com/maps/documentation/android/infowindows#custom_info_windows): «Информационное окно ... не является живым видом ... не будет уважать ... touch или события жестов. Однако вы можете прослушивать общий клик по всему информационному окну ... ». Таким образом, вы можете использовать «все события информационного окна», чтобы прослушивать клики, которые были бы над кнопкой, но сама кнопка была бы просто пикселями на изображении (так что анимация без кнопки тоже). – Phasmal

0

Я хотел бы добавить что-то к @tony , В соответствии с documentation вы не можете добавить действие к своему пользовательскому представлению, поскольку оно нарисовано как изображение во время выполнения.

Примечание. Информационное окно, которое нарисовано, не является живым. Представление представляет собой в качестве изображения (используя View.draw (Canvas)) в то время, когда возвращается . Это означает, что любые последующие изменения в представлении не будут отображаться на информационном окне на карте . Чтобы обновить информационное окно позже (например, после загрузки изображения), вызовите showInfoWindow(). Кроме того, информационное окно не будет учитывать любую интерактивность , типичную для обычного вида, такую ​​как события касания или жестов. Однако вы, , можете прослушать общий клик по всему информационному окну как , описанный в следующем разделе.

Смежные вопросы