управлять жестом пользователя на моей карте

Я новичок в кодировании карты Google, мой вопрос заключается в том, как я управляю жестом пользователя, перетаскиванием, увеличением и уменьшением масштаба. потому что мой код всегда возвращается к текущему местоположению пользователя, когда я увеличиваю/уменьшаю масштаб, над, когда я перетаскиваю/прокручиваю вверх, вниз, влево, вправо. всегда возвращаться к текущему положению.

это мой код для текущего локального пользователя

private GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() {
        @Override
        public void onMyLocationChange(Location location) {
            LatLng loc = new LatLng(location.getLatitude(), location.getLongitude());
            mMarker = mMap.addMarker(new MarkerOptions().position(loc));
            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16));
        }
    };

person StepHanus Ckw    schedule 21.05.2016    source источник
comment
Просто удалите mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16));   -  person antonio    schedule 21.05.2016
comment
если я удалю этот код, мое приложение не сможет напрямую перейти к текущей позиции пользователя. Я хочу, чтобы при открытии приложения камера перемещалась в текущее местоположение пользователя, но все же могла перемещать камеру карты, например, перетаскивать масштабирование/удаление прокрутки, не возвращаясь к текущему местоположению пользователя,   -  person StepHanus Ckw    schedule 21.05.2016
comment
Итак, вы хотите, чтобы карта была сосредоточена на вашем текущем местоположении только в первый раз?   -  person antonio    schedule 21.05.2016
comment
@антонио как? вы можете мне помочь?   -  person StepHanus Ckw    schedule 21.05.2016


Ответы (1)


Вы можете использовать boolean для перемещения камеры только в первый раз:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMyLocationChangeListener {
    private GoogleMap mMap;
    private Marker mMarker;
    private boolean firstTime = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        ((SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map)).getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        mMap.setMyLocationEnabled(true);
        mMap.setOnMyLocationChangeListener(this);
    }

    @Override
    public void onMyLocationChange(Location location) {
        LatLng loc = new LatLng(location.getLatitude(), location.getLongitude());
        mMarker = mMap.addMarker(new MarkerOptions().position(loc));

        if (firstTime) {
            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16));
            firstTime = false;
        }
    }
}

ПРИМЕЧАНИЕ. Учтите, что в этом примере используется GoogleMap.OnMyLocationChangeListener только потому, что это метод, который вы используете в своем вопросе, но он устарел, и вы должны использовать FusedLocationProviderApi в соответствии с документация:

public final void setOnMyLocationChangeListener (слушатель GoogleMap.OnMyLocationChangeListener)

Этот метод устарел. вместо этого используйте com.google.android.gms.location.FusedLocationProviderApi. FusedLocationProviderApi обеспечивает улучшенное определение местоположения и энергопотребление и используется синей точкой «Мое местоположение». См. MyLocationDemoActivity в папке примеров приложений для примера кода или в Руководстве разработчика по местоположению.

person antonio    schedule 21.05.2016
comment
хорошо, попробуй позже, спасибо, прежде чем @antonio, ты очень полезен - person StepHanus Ckw; 21.05.2016
comment
hai @antonio, я пробую ваш код, но он все равно возвращается к моему текущему местоположению. - person StepHanus Ckw; 21.05.2016
comment
Не могли бы вы опубликовать наиболее важные части вашего кода? - person antonio; 21.05.2016