使用Google地图指向特定位置

时间:2018-07-07 12:15:04

标签: android google-maps

下面是我完整的片段代码,应显示google map并指向地图中的特定位置。

package com.example.sample.karcha;

import android.location.Location;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;


public class PurchasePlaceFragment extends SupportMapFragment {

    private static final String TAG = "LocatrFragment";
    private GoogleApiClient mClient;
    private GoogleMap mMap;


    private SupportMapFragment mMapFragment;
    private Location mCurrentLocation;

    public static  SupportMapFragment newInstance() {

        PurchasePlaceFragment fragment = new PurchasePlaceFragment();
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);

    getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
            updateUI();
        }
    });
}

private void updateUI() {

    if (mMap == null ) {
        return;
    }

    LatLng itemPoint = new LatLng(51.508530,-0.076132);
    LatLng myPoint = new LatLng(
            mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude());
    LatLngBounds bounds = new LatLngBounds.Builder()
            .include(itemPoint)
            .include(myPoint)
            .build();
    int margin = getResources().getDimensionPixelSize(R.dimen.map_inset_margin);
    CameraUpdate update = CameraUpdateFactory.newLatLngBounds(bounds, margin);
    mMap.animateCamera(update);
}
}

执行此代码仅显示地图,但不指向特定位置。

我的理解是onMapReady()未执行,因此未调用updateUI()。

任何想法都出在哪里。

1 个答案:

答案 0 :(得分:0)

getMapAsysnc 的调用似乎没有正确的方式。

注意: onMapReady()通过在MapFragment实例上调用getMapAsysnc()来调用。

查看您共享的代码,它直接调用getMapAsysnc()

尝试将其更改为

mMapFragment.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
            updateUI();
        }
    });

这应该给您想要的结果。

希望这会有所帮助。