2016-03-25 6 views
0

У меня есть активность карты в моем приложении, и я пытаюсь сделать это, когда я открою активность карты, она автоматически увеличится до моего местоположения, но вместо этого она масштабируется каждые несколько секунд ,Карта Активность масштабируется за каждые несколько секунд

Это мой код:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 
private static final String FIREBASE_URL="https://****.firebaseio.com/"; 
private Firebase firebaseRef; 
private LocationManager locationManager; 
private GoogleMap mMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps2); 
    Firebase.setAndroidContext(this); 
    firebaseRef = new Firebase(FIREBASE_URL); 

    // 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); 
    setUpMapIfNeeded(); 
    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 

     @Override 
     public boolean onMarkerClick(Marker marker) { 
      final String title = marker.getTitle().toString(); 

      firebaseRef.addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        for (DataSnapshot user : dataSnapshot.child("users").getChildren()) { 
         String event_title = user.child("event/event_title").getValue().toString(); 
         if (title.equals(event_title)) { 

          String event_date = user.child("event/event_date").getValue().toString(); 
          String event_content = user.child("event/event_content").getValue().toString(); 
          String age_limit = user.child("event/age_limit").getValue().toString(); 
          String event_hour = user.child("event/event_hour").getValue().toString(); 
          String location_left = user.child("location_left").getValue().toString(); 
          String location_right = user.child("location_right").getValue().toString(); 
          final SharedPreferences sp = getSharedPreferences("key", 0); 
          final SharedPreferences.Editor sedt = sp.edit(); 

          sedt.putString("event_title", event_title); 
          sedt.putString("event_date", event_date); 
          sedt.putString("event_content", event_content); 
          sedt.putString("age_limit", age_limit); 
          sedt.putString("event_hour", event_hour); 
          sedt.putString("location_left", location_left); 
          sedt.putString("location_right", location_right); 
          sedt.commit(); 

         } 

        } 
        Intent intent = new Intent(MapsActivity.this, EventInfo.class); 
        startActivity(intent); 
       } 

       @Override 
       public void onCancelled(FirebaseError firebaseError) { 

       } 
      }); 



    return true; 
     } 
    }); 

} 

private void setUpMapIfNeeded() { 
    if (mMap == null) { 
     // Try to obtain the map from the SupportMapFragment. 
     mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
     if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
       == PackageManager.PERMISSION_GRANTED) { 
      mMap.setMyLocationEnabled(true); 
     } else { 
      Toast.makeText(MapsActivity.this, "You have to accept!", Toast.LENGTH_LONG).show(); 
      if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
        == PackageManager.PERMISSION_GRANTED) { 
       mMap.setMyLocationEnabled(true); 
      } 
     } 

     if (mMap != null) { 


      mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { 

       @Override 
       public void onMyLocationChange(Location arg0) { 

        CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(arg0.getLatitude(), arg0.getLongitude())); 
        CameraUpdate zoom=CameraUpdateFactory.zoomTo(12); 

        mMap.moveCamera(center); 
        mMap.animateCamera(zoom); 
       } 
      }); 

     } 
    } 
} 


@Override 
public void onMapReady(final GoogleMap googleMap) { 

    mMap=googleMap; 
    firebaseRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot child : dataSnapshot.child("users").getChildren()) { 


       String rightLocation = child.child("location_right").getValue().toString(); 
       String leftLocation = child.child("location_left").getValue().toString(); 

       double location_left = Double.parseDouble(leftLocation); 
       double location_right = Double.parseDouble(rightLocation); 
       String event_title = child.child("event/event_title").getValue().toString(); 
       LatLng cod = new LatLng(location_left, location_right); 
       googleMap.addMarker(new MarkerOptions().position(cod).title(event_title)); 


      } 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 


} 

}

Я могу предположить, что это проблема в моем setUpMapIfNeeded() метод, но я не могу найти проблему.

Что я делаю неправильно?

ответ

0

Проблема обусловлена ​​ниже кода

   CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(arg0.getLatitude(), arg0.getLongitude())); 
       CameraUpdate zoom=CameraUpdateFactory.zoomTo(12); 
       mMap.moveCamera(center); 
       mMap.animateCamera(zoom); 

Как onMyLocationChange слушатель вызывался, когда их какие-либо изменения в местоположении.

Так что, если вам необходимо перейти в центр карты до последнего места, тогда у вас есть код для проверки фактического перемещения между предыдущим местоположением.

Если на самом деле произошло перемещение, тогда вы можете изменить центр и масштаб карты.

+0

Итак, что я могу изменить в своем коде, чтобы заставить его работать? –

+0

удалите этот код. mMap.setOnMyLocationChangeListener (новый GoogleMap.OnMyLocationChangeListener() { @Override общественного недействительными onMyLocationChange (Location arg0) { CameraUpdate центр = CameraUpdateFactory.newLatLng (новый LatLng (arg0.getLatitude(), arg0.getLongitude())); CameraUpdate масштабирования = CameraUpdateFactory.zoomTo (12); mMap.moveCamera (в центре); mMap.animateCamera (масштабирование); } }); – Abhi

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