2016-08-02 4 views
24

오늘 내 오래된 코드를 살펴보면, OnCameraChangeListener()가이 이제는 더 이상 사용되지 않습니다. 이없는OnCameraChangeListener()가 더 이상 지원되지 않습니다.

mGoogleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { 
    @Override 
    public void onCameraChange(CameraPosition cameraPosition) { 
     // Cleaning all the markers. 
     if (mGoogleMap != null) { 
      mGoogleMap.clear(); 
     } 

     mPosition = cameraPosition.target; 
     mZoom = cameraPosition.zoom; 

     if (mTimerIsRunning) { 
      mDragTimer.cancel(); 
     } 

     mDragTimer.start(); 
     mTimerIsRunning = true; 
    } 
}); 

새로운 수신기 (일명 OnCameraMoveListener()) 방법 onCameraMove() : 나는 어려운 찾는거야

는 내 코드의이 부분을 해결하는 방법을 이해하는 CameraPosition cameraPosition 입력 변수이므로 꽤 잃어 버렸습니다. 이전 코드를 재활용 할 수있는 방법이 있습니까?

Here은 참고 자료입니다.

답변

25

camera change events의 새 모델에서는 CameraPosition이 수신기로 전달되지 않는 것이 옳습니다.

특별히 필요하면 (예 : 이동 시작, 중간 이동, 취소 또는 완료/유휴 상태로 복귀) 항상 getCameraPosition()을 사용해야합니다.

+0

gC로 인해 모든 콜백에서 getCameraPosition을 호출 할 때 getCameraPosition이 메모리를 할당하지 않고 응용 프로그램이 멈추는 경우가 있습니다. :/ –

+1

@MatthiasSchicker - [Maps SDK에 관한 문제 제기] (https://code.google.com/p/gmaps-api-issues/) – ianhanniballake

+0

Google지도 SDK와 관련하여 알려진 문제입니다. (https://code.google.com/p/gmaps-api-issues/issues/detail?id=6483)하지만 지금은 수정 된 것 같습니다. 죄송합니다. 최신 버전이 아닙니다. –

42

play-services-maps 9.4.0 version of the API에서, 그들은 세 개의 카메라 리스너 GoogleMap.OnCameraChangeListener() 교체 : 코드에

  • GoogleMap.OnCameraMoveStartedListener
  • GoogleMap.OnCameraMoveListener
  • GoogleMap.OnCameraIdleListener

을 바탕으로, 나는 당신이 GoogleMap.OnCameraIdleListenerGoogleMap.OnCameraMoveStartedListener를 사용할 필요가 있다고 생각 이렇게 :

mGoogleMap.setOnCameraMoveStartedListener(new GoogleMap.OnCameraMoveStartedListener() { 
      @Override 
      public void onCameraMoveStarted(int i) { 
       mDragTimer.start(); 
       mTimerIsRunning = true; 
      } 
     }); 

     mGoogleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { 
      @Override 
      public void onCameraIdle() { 
       // Cleaning all the markers. 
       if (mGoogleMap != null) { 
        mGoogleMap.clear(); 
       } 

       mPosition = mGoogleMap.getCameraPosition().target; 
       mZoom = mGoogleMap.getCameraPosition().zoom; 

       if (mTimerIsRunning) { 
        mDragTimer.cancel(); 
       } 

      } 
     }); 
+0

'setOnCameraIdleListener'에 api를 호출하면 맵의 마커를 표시하지만 '마커'를 클릭하면'setOnCameraIdleListener'가 다시 호출됩니다. 어떻게해야할까요? –

4

는 새로 도입 된 네 개의 카메라 리스너 (OnCameraIdleListener, OnCameraMoveListener, OnCameraMoveStartedListener, OnCameraMoveCanceledListener)를 사용하는 것이 좋습니다,하지만 여전히 android-maps-utilssetOnCameraChangeListener 사용하는 특정 버전과 함께 가고 싶은 경우

(아래) 'com.google.maps.android:android-maps-utils:0.4.3'

을 모듈 레벨 gradle 파일에 컴파일하십시오.

관련 문제