BaiduMap SDK-多个个性化地图切换Demo

目录

1. assets中添加多个json文件

1.1 json文件项目结构

1.2 陆地(custom_config_land.json)

1.3水系(custom_config_water.json)

1.4 绿地(custom_config_green.json)

1.5 行政边界(custom_config_district.json)

1.6 旅游景区(custom_config_scenic.json)

1.7 机场(custom_config_airport.json)

2 代码编写

2.1 xm代码

2.2 Activity代码

2.2.1 初始化所有view

2.2.2 初始化数据和事件

2.2.3 个性化切换事件

2.2.4 刷新地图(设置个性化地图)

2.2.5 加载assets中的json

2.2.6 onDestroy()销毁地图组件和地图


1. assets中添加多个json文件

1.1 json文件项目结构

1.2 陆地(custom_config_land.json)

[
  {
    "featureType": "land",
    "elementType": "geometry",
    "stylers": {
      "color": "#800000ff",
      "level": "12"
    }
  },
  {
    "featureType": "land",
    "elementType": "geometry",
    "stylers": {
      "color": "#800080ff"
    }
  }
]

1.3水系(custom_config_water.json)

[
  {
    "featureType": "water",
    "elementType": "geometry",
    "stylers": {
      "color": "#4169E1ff"
    }
  }
]

1.4 绿地(custom_config_green.json)

[
  {
    "featureType": "green",
    "elementType": "geometry",
    "stylers": {
      "color": "#008000ff"
    }
  }
]

1.5 行政边界(custom_config_district.json)

[
  {
    "featureType": "districtlabel",
    "elementType": "labels.text.stroke",
    "stylers": {
      "color": "#13171dff"
    }
  },
  {
    "featureType": "districtlabel",
    "elementType": "labels.text.fill",
    "stylers": {
      "color": "#4e5961ff"
    }
  }
]

1.6 旅游景区(custom_config_scenic.json)

[
  {
    "featureType": "scenicspotslabel",
    "elementType": "all",
    "stylers": {
      "color": "#800000ff"
    }
  },
  {
    "featureType": "scenicspots",
    "elementType": "all",
    "stylers": {
      "color": "#800000ff"
    }
  }
]

1.7 机场(custom_config_airport.json)

[
  {
    "featureType": "airportlabel",
    "elementType": "all",
    "stylers": {
      "color": "#800000ff"
    }
  },
  {
    "featureType": "airportlabel",
    "elementType": "geometry.fill",
    "stylers": {
      "color": "#800000ff"
    }
  },
  {
    "featureType": "airportlabel",
    "elementType": "labels.text.fill",
    "stylers": {
      "color": "#800000ff"
    }
  }
]

2 代码编写

2.1 xm代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/rl_parent">
 <LinearLayout android:id="@+id/ll_mapView"
     android:layout_width="match_parent"
     android:layout_height="match_parent">

 </LinearLayout>
    <!--<com.baidu.mapapi.map.MapView-->
        <!--android:id="@+id/bmapView"-->
        <!--android:layout_width="fill_parent"-->
        <!--android:layout_height="fill_parent"-->
        <!--android:clickable="true" />-->

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="@android:color/darker_gray">

        <RadioGroup
            android:id="@+id/rb_custom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <RadioButton
                android:id="@+id/rb_open_custom"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/str_open_mapcustom" />

            <RadioButton
                android:id="@+id/rb_close_custom"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/str_close_mapcustom" />
        </RadioGroup>

        <Spinner android:id="@+id/spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
         android:visibility="gone" ></Spinner>
    </LinearLayout>

    <TextView
        android:id="@+id/txt_coding"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@android:color/darker_gray"
        android:padding="5dp"
        android:textColor="@android:color/black"
        android:textSize="16dp" />

</RelativeLayout>

2.2 Activity代码

2.2.1 初始化所有view

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mapcustom);
        context = this;
        //初始化View
        initView();
        //初始化数据和事件
        initData();

    }
   //初始化View
    private void initView() {
        rb_custom = (RadioGroup) findViewById(R.id.rb_custom);
        txt_coding = (TextView) findViewById(R.id.txt_coding);
        rb_open_custom = (RadioButton) findViewById(R.id.rb_open_custom);
        rb_close_custom = (RadioButton) findViewById(R.id.rb_close_custom);
        spinner = (Spinner) findViewById(R.id.spinner);
        ll_mapView = (LinearLayout) findViewById(R.id.ll_mapView);
        mMapView = new MapView(context, new BaiduMapOptions());
        ll_mapView.addView(mMapView);
    }

2.2.2 初始化数据和事件

 private void initData() {
        List<String> spinnerList = new ArrayList<String>();
        spinnerList.add("个性化");
        spinnerList.add("陆地");
        spinnerList.add("水系");
        spinnerList.add("绿地");
        spinnerList.add("行政区边界");
        spinnerList.add("景区");
        spinnerList.add("机场");
        spinnerList.add("地铁");
        spinnerList.add("教育和医疗");
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, spinnerList);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new SpinnerOnSelect());
        rb_custom.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                switch (i) {
                    case R.id.rb_open_custom://显示个性地图
                        MapView.setMapCustomEnable(true);
                        spinner.setVisibility(View.VISIBLE);
                        break;
                    case R.id.rb_close_custom://关闭个性地图
                        MapView.setMapCustomEnable(false);
                        spinner.setVisibility(View.INVISIBLE);
                        break;
                }
            }
        });
    }

2.2.3 个性化切换事件

 private class SpinnerOnSelect implements AdapterView.OnItemSelectedListener {

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

            switch (i) {
                case 0://全部
                    refreshMap("custom_config_dark.json");
                    break;
                case 1://陆地
                    refreshMap("custom_config_land.json");
                    break;
                case 2://水系
                    refreshMap("custom_config_water.json");
                    break;
                case 3://绿地
                    refreshMap("custom_config_green.json");
                    break;
                case 4://行政区边界
                    refreshMap("custom_config_district.json");
                    break;
                case 5://景点
                    refreshMap("custom_config_scenic.json");
                    break;
                case 6://机场
                    refreshMap("custom_config_airport.json");
                    break;
               
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    }

2.2.4 刷新地图(设置个性化地图)

  /**
     * 设置个性化地图
     */

    private void refreshMap(String path) {
        MapView.setMapCustomEnable(false);
        ll_mapView.removeView(mMapView);
        mMapView.onDestroy();

        setMapCustomFile(context, path);
        mMapView = new MapView(context, new BaiduMapOptions());
        ll_mapView.addView(mMapView);
        MapView.setMapCustomEnable(true);
    }

2.2.5 加载assets中的json

// 设置个性化地图config文件路径
    private void setMapCustomFile(Context context, String PATH) {
        FileOutputStream out = null;
        InputStream inputStream = null;
        String moduleName = null;
        try {
            inputStream = context.getAssets()
                    .open("customConfigdir/" + PATH);
            byte[] b = new byte[inputStream.available()];
            inputStream.read(b);

            moduleName = context.getFilesDir().getAbsolutePath();
            File f = new File(moduleName + "/" + PATH);
            if (f.exists()) {
                f.delete();
            }
            f.createNewFile();
            out = new FileOutputStream(f);
            out.write(b);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        MapView.setCustomMapStylePath(moduleName + "/" + PATH);
    }

2.2.6 onDestroy()销毁地图组件和地图

onDestory()如果直销毁MapView,不销毁地图组件或造成崩溃;

 @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        MapView.setMapCustomEnable(false);
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }

猜你喜欢

转载自blog.csdn.net/niuba123456/article/details/81124395
今日推荐