2013-01-09 2 views
4

우리는 v1 Maps API에서 v2 API로 응용 프로그램을 포팅하고 마커에 문제가 있습니다.Android지도 API v2 - 마커 회전에 접근 하시겠습니까?

특정 지리적 방향을 가리키는 마커가 필요합니다. V1에서는 그리기 시간에 올바른 방향으로 비트 맵 포인팅을 만들 수 있지만 V2에서는 마커 비트 맵을 변경할 수 없습니다.

지도가 회전 될 때 (성능 문제처럼 들릴 수 있음) 모든 우리의 마커를 파괴하고 다시 빌드하는 것이 가장 좋은 방법인지 또는 모든 것을 직접 그리는 지 여부는 확실하지 않습니다. 그것은 TileOverlay를 통하거나지도의 꼭대기에 앉았던 우리 자신의 경치를 통해 될 수 있습니다.

나는 이러한 접근법을 정말로 좋아하지 않습니다. 누구든지 그들 중 하나를 시도 했습니까?

업데이트 :

나는 우리 자신의 뷰를 통해 그리기 시도했지만,지도를 드래그 할 때 그것은 너무 랙이 있었다.

저는 이제 &의 마커를 다시 만들었지 만 성능상의 문제로 ~ 2000mS를 사용하여 60 개의 마커를 업데이트했습니다.

답변

0

addMarker(new MarkerOptions()) 방법을 사용할 수 없습니까? 사용자 정의 마커를해야하는 경우

당신이 InfoWindowAdapter의 구현을 작성하고 여기에 mMap.setInfoWindowAdapter(new CustomInfoWindowAdapter());

같은 그 구현을 사용할 수있는 것은 InfoWindowAdapter

+0

무언가 잘못 이해했는데 마커 비트 맵을 바꿀 수 있다고 생각합니다. Google지도 v2의 샘플 코드를 확인하고 MarkerDemoActivity를 확인하십시오. 거기에 맞춤 마커가 있는지 확인하십시오. 보기를 다시 그리지 않도록 onConfigurationChanged를 재정의 할 수 있습니다. 이번엔 내가 너를 바로 잡았 니? –

+0

아니요, MarkerDemoActivity는 마커를 만들 때 addMarkersToMap에만 마커 아이콘을 설정합니다. 마커 아이콘을 변경하지 않습니다. –

+0

@RichardSewell 마커를 회전하는 방법을 모르지만 베어링을 사용하여 특정 위치를 가리키는 이미지 (화살표)를 확실히 회전시킬 수 있습니다. 이 질문을보십시오 : http://stackoverflow.com/questions/15381358/is-it-possible-to-set-dimensions-to-a-groundoverlay-that-is-independent-of-the-m – AlexAndro

0

나는 또한 새로운 내 응용 프로그램 (Runbot)를 재 작성하고 있습니다에 대한 설명서입니다 API를 사용하고 마일스톤 (1km, 2km 등)을 나타내는 맞춤 마커를 만드는 방법과 확대/축소 수준에 따라 전체를 표시하거나 표시하는 방법을 찾아야했습니다. v1 API에 사용 된 사용자 정의 드로어 블이 있었는데 마커를 렌더링하기 위해 지금 수행하는 작업은 이것에 관한 것입니다 (Position은 위치 및 추가 정보를 보유하고있는 클래스입니다. 여기에 필요한 것은 모두 LatLng 속성입니다). 사용자 정의 마커를 생성하고 추가 게다가

private void addMarker(Position p, MilestoneDrawable milestone) { 
    if (mMarkers.containsKey(p)) { 
     mMarkers.get(p).setVisible(true); 
    } else { 
     Marker m = mMap.addMarker(new MarkerOptions() 
      .position(p.latLng) 
      .icon(BitmapDescriptorFactory.fromBitmap(Util.drawableToBitmap(milestone))) 
      .anchor(0.5f, 1.0f) // bottom center 
      ); 
     mMarkers.put(p, m); 
    } 
} 

, 당신은 무엇을보고 내가 파괴하고 그들에게 모든 시간을 만들 필요가 없습니다 나는 HashMap에서 마커를 유지한다는 것이다. 확대/축소하고 표시 할 항목을 결정할 때 먼저 모든 표시자를 보이지 않게 설정하고 표시하려는 자에게 addMarker()을 호출하고 이미 내가 HashMap에있는 표시자를 다시 볼 수 있습니다.

이 정보가 도움이 되었기를 바랍니다. 나는 새로운 API에 대해 약간의 혼란스러운 느낌을 가지고있다 ...

0

나는 회전해야하는 마커가있는 비슷한 문제가있다. 내 솔루션은 표식이 표식 생성에 대한 책임이있는 개체를 표시하는 것이 었습니다. 나는 같이 객체에 몇 가지 방법이 있습니다

protected Marker getMarker(GoogleMap map) { 
    if (this.marker == null) { 
     marker = map.addMarker(new MarkerOptions().position(location). 
      icon(BitmapDescriptorFactory.fromBitmap(BusMarkerImageFactory. 
      getMarkerIcon(heading)))); 
    } 
    return marker; 
} 

protected void updateMarker(GoogleMap map) { 
    if (marker != null) { 
     rotateIcon(); 
     marker.setPosition(location); 
    } else { 
     getMarker(map); 
    } 

private void rotateIcon() { 
    marker.setIcon(BitmapDescriptorFactory. 
     fromBitmap(BusMarkerImageFactory.getMarkerIcon(heading))); 
} 

이것은 물론, 코드가 다를 수 있으므로, 그들이 향하고있는 방향을 가리키는 마커 버스를 그리는 시스템에서이지만, 개념은 매우 비슷합니다. 전체 마커를 다시 작성하는 대신 어딘가에 대한 참조를 유지하고 아이콘을 재설정 만하면됩니다.

물론 사소한 변경을 위해 비트 맵을 모두 그리는 것은 메모리 부족입니다.나는 (잘못된 이름의) BusMarkerImageFactory에서 플라이급 패턴을 사용하여 16 개의 가능한 헤딩 범위에 대해 16 개의 이미지를 유지했다. 이 클래스는 단순히 제목을 가져 와서 해당 범위에 매핑 한 이미지를 반환하는 정적 클래스입니다.

5

모두에게 좋은 소식입니다! Google은 Maps API에 로테이션을 추가 했으므로 자체 구현을 롤백 할 필요가 없습니다.

그들은 평면 마커를 추가했는데 원래의 질문과 더 관련이 있다고 생각합니다. 평평하게 한 표식은 원래지도에 그려진 방향으로 유지됩니다. https://developers.google.com/maps/documentation/android/marker#flatten_a_marker

유일한 요구 사항은 Google Play 서비스의 최신 버전을 참조하는 것입니다.

관련 문제