如何使用谷歌地图V2在Android中使用MapView?

我想在我的活动中显示地图。

在谷歌地图V1我们使用 –

<com.google.android.maps.MapView android:id="@+id/mapview" android:layout_width="match_parent" android:layout_height="match_parent" android:apiKey="@string/api_map_key" android:clickable="true" android:enabled="true" /> 

并通过使用MapActivity类来扩展活动。

在Versing 2中,它使用Fragment而不是mapview,并且必须通过FragmentActivity来扩展活动,而不是普通的Activity。 EX-

 <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment" /> 

现在我可以使用相同的方式创buildmapview,而不是使用版本2的片段。()

任何人都可以使用V2使用MapView吗?

是的,你可以在第二版中使用MapView的…进一步的细节,你可以从这里得到帮助

https://gist.github.com/joshdholtz/4522551


SomeFragment.java

 public class SomeFragment extends Fragment implements OnMapReadyCallback{ MapView mapView; GoogleMap map; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.some_layout, container, false); // Gets the MapView from the XML layout and creates it mapView = (MapView) v.findViewById(R.id.mapview); mapView.onCreate(savedInstanceState); mapView.getMapAsync(this); return v; } @Override public void onMapReady(GoogleMap googleMap) { map = googleMap; map.getUiSettings().setMyLocationButtonEnabled(false); map.setMyLocationEnabled(true); /* //in old Api Needs to call MapsInitializer before doing any CameraUpdateFactory call try { MapsInitializer.initialize(this.getActivity()); } catch (GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } */ // Updates the location and zoom of the MapView /*CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(43.1, -87.9), 10); map.animateCamera(cameraUpdate);*/ map.moveCamera(CameraUpdateFactory.newLatLng(43.1, -87.9)); } @Override public void onResume() { mapView.onResume(); super.onResume(); } @Override public void onPause() { super.onPause(); mapView.onPause(); } @Override public void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override public void onLowMemory() { super.onLowMemory(); mapView.onLowMemory(); } } 

AndroidManifest.xml

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-feature android:glEsVersion="0x00020000" android:required="true"/> <permission android:name="com.example.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-permission android:name="com.example.permission.MAPS_RECEIVE"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your_key"/> <activity android:name=".HomeActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

some_layout.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.google.android.gms.maps.MapView android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> 

从这里和这里更完整的样本。

或者你可以看看我的布局示例。 ps不需要在地图视图中放置API密钥。

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.gms.maps.MapView android:id="@+id/map_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="2" /> <ListView android:id="@+id/nearby_lv" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:layout_weight="1" /> </LinearLayout> 

我有一个非常简单的方法,使其工作100%

第1步:创build一个基本的活动,并删除所有额外的东西,如晶圆厂和snakbar执行,以保持干净。

步骤1.5:将这些添加到您的XML:

 <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:layout_height="match_parent"/> 

第2步:在oncreate之上创build一个私有variables:

 private GoogleMap googleMap; 

第3步:添加这个在你的oncreate:

 if (googleMap == null) { googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.mapNB)).getMap(); } googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); LatLng coordinate = new LatLng(21.182782, 72.830115); CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 11); googleMap.moveCamera(CameraUpdateFactory.newLatLng(coordinate)); googleMap.animateCamera(yourLocation); googleMap.setMyLocationEnabled( true ); googleMap.getUiSettings().setZoomControlsEnabled( true ); googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { somefunction(); return false; } }); 

不要忘记添加您的地图API密钥。