2016-06-16 2 views
0

안녕하세요. Google지도에서 마커를 한 위치에서 다른 위치로 업데이트하려고합니다. uber처럼 애니메이션으로 마커의 위치를 ​​변경하고 싶습니다 & 안녕하세요. 아래 샘플 코드. 어떤 오류도 발생하지 않습니다. 나는 애니메이션을 보지 않고있다. 모든 간단한 애니메이션이 가능합니다.Android : Google지도의 한 위치에서 다른 위치로 마커를 움직일 수 없습니다.

코드

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 
    private static int SPLASH_TIME_OUT = 5000; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 



    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 

     // Add a marker in tilak nagar 
     LatLng tilkanagar = new LatLng(28.6353, 77.0971); 

     LatLng Firstmarker = new LatLng(28.6350, 77.0970); 
     LatLng FirstmarkerTo = new LatLng(28.6356, 77.0972); 

     LatLng Secondmarker = new LatLng(28.6345, 77.0969); 
     LatLng SecondmarkerTo = new LatLng(28.6347, 77.0967); 


     mMap.addMarker(new MarkerOptions().position(tilkanagar).title("Hello I am at Techvision")); 
     Marker marker = mMap.addMarker(new MarkerOptions().position(Firstmarker).title("1 Minute Away").icon(BitmapDescriptorFactory.fromResource(R.drawable.car))); 
     Marker marker1 = mMap.addMarker(new MarkerOptions().position(Secondmarker).title("2 Minutes Away").icon(BitmapDescriptorFactory.fromResource(R.drawable.car))); 


     mMap.moveCamera(CameraUpdateFactory.newLatLng(tilkanagar)); 
     mMap.animateCamera(CameraUpdateFactory.zoomTo(18.0f)); 


        animateMarker(marker, FirstmarkerTo, false); 
        animateMarker(marker1,SecondmarkerTo,false); 

    } 


    public void animateMarker(final Marker marker, final LatLng toPosition, 
           final boolean hideMarker) { 

     Thread background = new Thread() { 
      public void run() { 

       try { 
        // Thread will sleep for 5 seconds 
        sleep(5*1000); 

        // After 5 seconds redirect to another intent 
        final Handler handler = new Handler(); 
        final long start = SystemClock.uptimeMillis(); 
        Projection proj = mMap.getProjection(); 
        Point startPoint = proj.toScreenLocation(marker.getPosition()); 
        final LatLng startLatLng = proj.fromScreenLocation(startPoint); 
        final long duration = 500; 

        final Interpolator interpolator = new LinearInterpolator(); 

        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          long elapsed = SystemClock.uptimeMillis() - start; 
          float t = interpolator.getInterpolation((float) elapsed 
            /duration); 
          double lng = t * toPosition.longitude + (1 - t) 
            * startLatLng.longitude; 
          double lat = t * toPosition.latitude + (1 - t) 
            * startLatLng.latitude; 
          marker.setPosition(new LatLng(lat, lng)); 

          if (t < 1.0) { 
           // Post again 16ms later. 
           handler.postDelayed(this, 16); 
          } else { 
           if (hideMarker) { 
            marker.setVisible(false); 
           } else { 
            marker.setVisible(true); 
           } 
          } 
         } 
        }); 

        //Remove activity 
        finish(); 

       } catch (Exception e) { 

       } 
      } 
     }; 

     // start thread 
     background.start(); 

      } 
} 

출력

enter image description here

+0

어떤 도움들 ??? –

+0

그게 힘들지 않다고 생각합니다 .... –

답변

0

당신은 마커 옵션을 통해 애니메이션 설정을 시도 할 수 있습니다. setAnimation()

또는 interpolator을 사용할 수 있습니다. 보간 기는 애니메이션 변경 비율을 정의합니다. 이를 통해 기본 애니메이션 효과 (알파, 스케일, 변환, 회전)를 가속, 감속, 반복 등을 할 수 있습니다. var marker;

public void animateMarker(final Marker marker, final LatLng toPosition, 
final boolean hideMarker) { 
final Handler handler = new Handler(); 
final long start = SystemClock.uptimeMillis(); 
Projection proj = mGoogleMapObject.getProjection(); 
Point startPoint = proj.toScreenLocation(marker.getPosition()); 
final LatLng startLatLng = proj.fromScreenLocation(startPoint); 
final long duration = 500; 

final Interpolator interpolator = new LinearInterpolator(); 

handler.post(new Runnable() { 
@Override 
public void run() { 
long elapsed = SystemClock.uptimeMillis() - start; 
float t = interpolator.getInterpolation((float) elapsed 
/duration); 
double lng = t * toPosition.longitude + (1 - t) 
* startLatLng.longitude; 
double lat = t * toPosition.latitude + (1 - t) 
* startLatLng.latitude; 
marker.setPosition(new LatLng(lat, lng)); 

if (t < 1.0) { 
// Post again 16ms later. 
handler.postDelayed(this, 16); 
} else { 
if (hideMarker) { 
marker.setVisible(false); 
} else { 
marker.setVisible(true); 
} 
} 
} 
}); 
} 

여기에 관련 그래서 티켓, 당신은 주변 지역 사회에서 제공하는 작업을 시도 할 수 있습니다 : How to animate marker in android map api V2?

+0

안녕하세요 @KENdi 당신이 이미이 기능을 사용했음을 알다시피. \ –

관련 문제