APP16(切换地图类型)
步骤:androidsdk | 百度地图API SDK (baidu.com)
总实现代码:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/id_rp_mapType" android:orientation="horizontal" android:checkedButton="@id/id_btn_normal" > <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/id_btn_normal" android:text="普通地图"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/id_btn_satellite" android:text="卫星地图"/> </RadioGroup> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="路况图" android:checked="false" android:id="@+id/id_cb_trafficEnabled" /> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="热力图" android:id="@+id/id_cb_heatMapEnabled" android:checked="false"/> </LinearLayout> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" /> </LinearLayout>
MainActivity.java
package com.example.myapp_subway; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.os.Bundle; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.RadioButton; import android.widget.RadioGroup; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.MapView; public class MainActivity extends AppCompatActivity { private MapView mMapView = null; private RadioGroup mapType; private RadioButton normalBtn; private RadioButton satelliteBtn; private CheckBox trafficEnabled; private CheckBox heatMapEnabled; @SuppressLint("MissingInflatedId") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); mapType = findViewById(R.id.id_rp_mapType); normalBtn = findViewById(R.id.id_btn_normal); satelliteBtn = findViewById(R.id.id_btn_satellite); trafficEnabled = findViewById(R.id.id_cb_trafficEnabled); heatMapEnabled = findViewById(R.id.id_cb_heatMapEnabled); initEvent(); } private void initEvent(){ mapType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { if (i == normalBtn.getId()) { mMapView.getMap().setMapType(BaiduMap.MAP_TYPE_NORMAL); } else if (i == satelliteBtn.getId()) { mMapView.getMap().setMapType(BaiduMap.MAP_TYPE_SATELLITE); } } }); trafficEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { mMapView.getMap().setTrafficEnabled(b); } }); heatMapEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { mMapView.getMap().setBaiduHeatMapEnabled(b); } }); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } }
DemoApplication.java
package com.example.myapp_subway; import android.app.Application; import com.baidu.mapapi.CoordType; import com.baidu.mapapi.SDKInitializer; public class DemoApplication extends Application { @Override public void onCreate() { super.onCreate(); //在使用SDK各组件之前初始化context信息,传入ApplicationContext // SDKInitializer.setAgreePrivacy(this,true);//Android6.0以上版本需要动态申请 SDKInitializer.initialize(this); //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型. //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。 SDKInitializer.setCoordType(CoordType.BD09LL); } }
build.gradle(:app)
plugins { id 'com.android.application' } android { namespace 'com.example.myapp_subway' compileSdk 33 defaultConfig { applicationId "com.example.myapp_subway" minSdk 24 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' implementation files('libs/BaiduLBS_Android.jar') testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' }
AndroidManifest.xml(清单文件)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:name=".DemoApplication" android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/Theme.MyApp_subway" tools:targetApi="31"> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="8fePBNoH6gF5szgRpDT4OLQc9bcKiuuP" /> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
效果: