如何使用谷歌地图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密钥。
- Android的URL到Uri
- 如何在路线谷歌地图v2机器人上绘制交互式折线
- findcom.google.android.gms:play-services:8.4.0,但是google-services插件需要8.3.0版本
- 设备未收到Firebase云消息通知
- 如何在android中设置EditTextPreference的数字值?
- Android Studio无法通过错误org.gradle.process.internal.ExecException进行debugging
- 版本冲突更新为播放服务9.4.0 Android Studio 2.2
- 如何查找Android版Google Play服务版本
- JavaScript警报在Android WebView中不起作用