public void MarkerAnimation(double latitude, double longitude, Action callback) { //gán lại vòng quay double mMoveIndex = 0; double MAX_MOVE_STEP = 40; var startPosition = this.Position; var finalPosition = new Position(latitude, longitude); double elapsed = 0; double t; double v; Device.StartTimer(TimeSpan.FromMilliseconds(100), () => { // Calculate progress using interpolator elapsed = elapsed + 100; t = elapsed / 4000; v = GeoHelper.GetInterpolation(t); var postionnew = GeoHelper.Interpolate(v, new Position(startPosition.Latitude, startPosition.Longitude), new Position(latitude, longitude)); mMoveIndex = mMoveIndex + 1; this.Position = new Position(postionnew.Latitude, postionnew.Longitude); if (mMoveIndex > MAX_MOVE_STEP) { callback(); return(false); } return(true); }); }