Jai*_*imy 2 android google-maps zoom google-maps-android-api-2
地图准备好后,是否可以更改缩放级别?当我打开应用程序时,它显示我的位置的地图和蓝点.但是,缩放级别是默认值3.如何更改?当我点击'MyLocationButton'时,我知道怎么做,但是当应用程序启动时却没有.
这是我的班级
public class MainPhoneActivity extends FragmentActivity implements ConnectionCallbacks, OnConnectionFailedListener, LocationSource, LocationListener, OnMyLocationButtonClickListener, OnMapReadyCallback{
private GoogleApiClient mGoogleApiClient;
private OnLocationChangedListener mMapLocationListener = null;
// location accuracy settings
private static final LocationRequest REQUEST = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_phone);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.mapView);
mapFragment.getMapAsync(this);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
@Override
protected void onResume() {
super.onResume();
mGoogleApiClient.connect();
}
@Override
public void onPause() {
super.onPause();
mGoogleApiClient.disconnect();
}
@Override
public void onMapReady(GoogleMap map) {
map.setLocationSource(this);
map.setMyLocationEnabled(true);
map.setOnMyLocationButtonClickListener(this);
}
public void showMyLocation(View view) {
if (mGoogleApiClient.isConnected()) {
String msg = "Location = "
+ LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onLocationChanged(Location location) {
if (mMapLocationListener != null) {
mMapLocationListener.onLocationChanged(location);
}
}
@Override
public void onConnected(Bundle connectionHint) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, REQUEST,this);
}
@Override
public void onConnectionSuspended(int cause) {
// Do nothing
}
@Override
public void onConnectionFailed(ConnectionResult result) {
// Do nothing
}
@Override
public boolean onMyLocationButtonClick() {
return false;
}
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
mMapLocationListener = onLocationChangedListener;
}
@Override
public void deactivate() {
mMapLocationListener = null;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以设置缩放级别,如下所示:
map.animateCamera(CameraUpdateFactory.newLatLngZoom(point,15));
Run Code Online (Sandbox Code Playgroud)
point你的LatLng位置在哪里?通过这种方式,您可以使用给定的缩放级别使该点居中.
完整方法:
@Override
public void onMapReady(GoogleMap map) {
map.setLocationSource(this);
map.setMyLocationEnabled(true);
map.setOnMyLocationButtonClickListener(this);
//newLatLngZoom(LatLng , ZoomLevel) -> choose your zoom level
// and change my 'point' with yours
map.animateCamera(CameraUpdateFactory.newLatLngZoom(point,15));
}
Run Code Online (Sandbox Code Playgroud)
编辑:
如果你想获得点坐标,你可以试试这个:
Location loc = map.getMyLocation();
LatLng point = new LatLng(loc.getlatitude() , loc.getLongitude());
Run Code Online (Sandbox Code Playgroud)
并以该点为中心.
完整方法:
@Override
public void onMapReady(GoogleMap map) {
map.setLocationSource(this);
map.setMyLocationEnabled(true);
map.setOnMyLocationButtonClickListener(this);
Location loc = map.getMyLocation();
if(loc != null){
LatLng point = new LatLng(loc.getLatitude() , loc.getLongitude());
map.animateCamera(CameraUpdateFactory.newLatLngZoom(point,15));
}
}
Run Code Online (Sandbox Code Playgroud)
这可能导致NullPointerExceptionbeacuse loc可能为null.
其他解决方案
如果你想第一次得到坐标,你应该onLocationChanged使用布尔变量设置第一次调用.
宣布它 CRDS_CALL = false;
@Override
public void onLocationChanged(Location location) {
if (mMapLocationListener != null) {
mMapLocationListener.onLocationChanged(location);
if(!CRDS_CALL){
LatLng point = new LatLng(location.getLatitude(), location.getLognitude());
map.animateCamera(CameraUpdateFactory.newLatLngZoom(point,15));
CRDS_CALL = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我使用的这个答案中map,你必须使用你的mapFragment,但如果你想在其他方法中使用它onCreate,你必须在它之外声明.
在此之前加上这个 onCreate
SupportMapFragment mapFragment;
Run Code Online (Sandbox Code Playgroud)
在其中,使用它像下面这样:
mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.mapView);
mapFragment.getMapAsync(this);
Run Code Online (Sandbox Code Playgroud)
这样,您就可以使用mapFragment其他方法
| 归档时间: |
|
| 查看次数: |
3964 次 |
| 最近记录: |