From f163344ffeb1e699fa1a2dfb8a70055bb1b9be7e Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 09 九月 2024 15:09:17 +0800
Subject: [PATCH] 首页界面优化,地图模块优化,部分下载地图瓦片功能代码

---
 app/src/main/res/drawable/bottom_order_white.xml                    |   26 +
 app/src/main/java/com/dayu/pipirrapp/utils/WebViewUtils.java        |   85 +++
 app/src/main/assets/js/map.js                                       |  243 ++++++++++
 app/src/main/java/com/dayu/pipirrapp/service/PushService.java       |   14 
 app/src/main/res/drawable/bottom_circle_bg.xml                      |    6 
 app/src/main/java/com/dayu/pipirrapp/MyApplication.java             |    6 
 app/src/main/res/drawable/bottom_my_white.xml                       |   27 +
 app/src/main/res/drawable/bottom_map_black.xml                      |   28 +
 app/src/main/res/drawable/vector_location.xml                       |    5 
 app/src/main/res/values/colors.xml                                  |    3 
 app/src/main/res/drawable/vector_timer.xml                          |   10 
 app/src/main/res/drawable/vector_adjust.xml                         |    5 
 app/src/main/res/drawable/vector_close.xml                          |    5 
 app/src/main/res/drawable/bottom_map_white.xml                      |   28 +
 app/src/main/res/drawable/vector_btn_date.xml                       |    5 
 app/src/main/assets/img/marker_black.svg                            |    1 
 app/src/main/res/layout/activity_main.xml                           |  140 ++++-
 app/src/main/assets/img/marker_red.svg                              |    1 
 app/src/main/java/com/dayu/pipirrapp/service/MyCommonService.java   |    6 
 app/build.gradle                                                    |   35 +
 app/src/main/res/drawable/vector_photo_camera.xml                   |    6 
 app/src/main/res/values/dimens.xml                                  |    1 
 app/src/main/res/drawable/vector_loop.xml                           |    5 
 app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java            |   64 +
 app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java |   10 
 app/src/main/assets/img/location.png                                |    0 
 app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java         |  150 ++++++
 app/src/main/AndroidManifest.xml                                    |   14 
 app/src/main/java/com/dayu/pipirrapp/js/MyWebViewInterface.java     |   19 
 app/src/main/res/drawable/bottom_my_black.xml                       |   27 +
 app/src/main/java/com/dayu/pipirrapp/tool/RocketMQConsumer.java     |   62 ++
 app/src/main/res/drawable/vector_location_clock.xml                 |    5 
 app/src/main/res/drawable/bottom_order_black.xml                    |   26 +
 app/src/main/res/drawable/vector_list.xml                           |    5 
 app/src/main/res/layout/fragment_map.xml                            |   13 
 app/src/main/assets/index.html                                      |   35 +
 app/src/main/res/menu/main_bottom_nav_menu.xml                      |   18 
 app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java     |  105 +++-
 app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java      |  165 ++++--
 app/src/main/res/drawable/vector_distance.xml                       |   10 
 app/src/main/java/com/dayu/pipirrapp/net/ApiService.java            |    5 
 app/src/main/res/layout/top_title.xml                               |    1 
 42 files changed, 1,247 insertions(+), 178 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index fb73009..59acc35 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -67,6 +67,18 @@
     viewBinding {
         enabled = true;
     }
+    packagingOptions {
+        exclude 'META-INF/DEPENDENCIES'
+        // 濡傛灉浣犺繕閬囧埌鍏朵粬閲嶅鐨凪ETA-INF鏂囦欢锛屼篃鍙互娣诲姞绫讳技鐨勬帓闄よ鍒�
+        exclude 'META-INF/LICENSE'
+        exclude 'META-INF/LICENSE.txt'
+        exclude 'META-INF/NOTICE'
+        exclude 'META-INF/NOTICE.txt'
+        // RocketMQ鐗规湁鐨勬帓闄ら」锛堝鏋滈渶瑕侊級
+        exclude 'META-INF/INDEX.LIST'
+        exclude 'META-INF/spring.factories'
+        exclude 'META-INF/spring.handlers'
+    }
 
 }
 
@@ -115,31 +127,31 @@
 
 //    //鎺ㄩ�佺浉鍏�
 //    // 姝ゅ浠Push 5.0.0 鐗堟湰涓轰緥锛�5.0.0 鐗堟湰寮�濮嬪彲浠ヨ嚜鍔ㄦ媺鍙� JCore 鍖咃紝鏃犻渶鍙﹀閰嶇疆
-    implementation 'cn.jiguang.sdk:jpush:5.2.2'
+//    implementation 'cn.jiguang.sdk:jpush:5.2.2'
 //    //鑻ヤ笉闆嗘垚鍘傚晢閫氶亾锛屽彲鐩存帴璺宠繃浠ヤ笅渚濊禆
 //    // 鏋佸厜鍘傚晢鎻掍欢鐗堟湰涓庢帴鍏� JPush 鐗堟湰淇濇寔涓�鑷达紝涓嬪悓
 //    // 鎺ュ叆鍗庝负鍘傚晢
-    implementation 'com.huawei.hms:push:6.5.0.300'
-    implementation 'cn.jiguang.sdk.plugin:huawei:5.2.2'
+//    implementation 'com.huawei.hms:push:6.5.0.300'
+//    implementation 'cn.jiguang.sdk.plugin:huawei:5.2.2'
 //    // 鎺ュ叆 FCM 鍘傚晢
 //    implementation 'com.google.firebase:firebase-messaging:23.0.5'
 //    implementation 'cn.jiguang.sdk.plugin:fcm:5.2.2'
 //    // 鎺ュ叆榄呮棌鍘傚晢
-    implementation 'cn.jiguang.sdk.plugin:meizu:5.2.2'
+//    implementation 'cn.jiguang.sdk.plugin:meizu:5.2.2'
 //    // 鎺ュ叆 VIVO 鍘傚晢
-    implementation 'cn.jiguang.sdk.plugin:vivo:5.2.2'
+//    implementation 'cn.jiguang.sdk.plugin:vivo:5.2.2'
 //    // 鎺ュ叆灏忕背鍘傚晢
-    implementation 'cn.jiguang.sdk.plugin:xiaomi:5.2.2'
+//    implementation 'cn.jiguang.sdk.plugin:xiaomi:5.2.2'
 //    // 鎺ュ叆 OPPO 鍘傚晢
 //    implementation 'cn.jiguang.sdk.plugin:oppo:5.2.2'
 //    // JPush Android SDK v4.6.0 寮�濮嬶紝闇�瑕佸崟鐙紩鍏� oppo 鍘傚晢 aar 锛岃涓嬭浇瀹樼綉 SDK 鍖呭苟鎶� jpush-android-xxx-release/third-push/oppo/libs 涓嬬殑 aar 鏂囦欢鍗曠嫭鎷疯礉涓�浠藉埌搴旂敤 module/libs 涓�
 //    implementation(name: 'com.heytap.msp-push-3.1.0', ext: 'aar')
 //    //浠ヤ笅涓� OPPO 3.1.0 aar闇�瑕佷緷璧�
-    implementation 'com.google.code.gson:gson:2.6.2'
-    implementation 'commons-codec:commons-codec:1.6'
-    implementation 'androidx.annotation:annotation:1.1.0'
+//    implementation 'com.google.code.gson:gson:2.6.2'
+//    implementation 'commons-codec:commons-codec:1.6'
+//    implementation 'androidx.annotation:annotation:1.1.0'
 //    // 鎺ュ叆鑽h��鍘傚晢
-    implementation 'cn.jiguang.sdk.plugin:honor:5.2.2'
+//    implementation 'cn.jiguang.sdk.plugin:honor:5.2.2'
 
 //    apply plugin: 'com.google.gms.google-services'
 //    apply plugin: 'com.huawei.agconnect'
@@ -150,4 +162,7 @@
 
     //骞挎挱閫氫俊
     implementation 'io.github.jeremyliao:live-event-bus-x:1.8.0'
+
+    //闃块噷鐨凴ocketMQ
+    implementation 'org.apache.rocketmq:rocketmq-client:4.9.4'
 }
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 18f83ca..5773a76 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -95,13 +95,13 @@
 
 
         <!--鐧惧害瀹氫綅-->
-        <meta-data
-            android:name="com.baidu.lbsapi.API_KEY"
-            android:value="Ky5wvrB9A9Rztsh3rQO8v8oNRgQM27NV"></meta-data>
-        <service
-            android:name="com.baidu.location.f"
-            android:enabled="true"
-            android:process=":remote"></service>
+<!--        <meta-data-->
+<!--            android:name="com.baidu.lbsapi.API_KEY"-->
+<!--            android:value="Ky5wvrB9A9Rztsh3rQO8v8oNRgQM27NV"></meta-data>-->
+<!--        <service-->
+<!--            android:name="com.baidu.location.f"-->
+<!--            android:enabled="true"-->
+<!--            android:process=":remote"></service>-->
 
     </application>
 
diff --git a/app/src/main/assets/img/location.png b/app/src/main/assets/img/location.png
new file mode 100644
index 0000000..e1e4ad3
--- /dev/null
+++ b/app/src/main/assets/img/location.png
Binary files differ
diff --git a/app/src/main/assets/img/marker_black.svg b/app/src/main/assets/img/marker_black.svg
new file mode 100644
index 0000000..c3bf707
--- /dev/null
+++ b/app/src/main/assets/img/marker_black.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><rect fill="none" height="24" width="24"/><path d="M12,2L12,2C8.13,2,5,5.13,5,9c0,1.74,0.5,3.37,1.41,4.84c0.95,1.54,2.2,2.86,3.16,4.4c0.47,0.75,0.81,1.45,1.17,2.26 C11,21.05,11.21,22,12,22h0c0.79,0,1-0.95,1.25-1.5c0.37-0.81,0.7-1.51,1.17-2.26c0.96-1.53,2.21-2.85,3.16-4.4 C18.5,12.37,19,10.74,19,9C19,5.13,15.87,2,12,2z M12,11.75c-1.38,0-2.5-1.12-2.5-2.5s1.12-2.5,2.5-2.5s2.5,1.12,2.5,2.5 S13.38,11.75,12,11.75z"/></svg>
\ No newline at end of file
diff --git a/app/src/main/assets/img/marker_red.svg b/app/src/main/assets/img/marker_red.svg
new file mode 100644
index 0000000..24e6869
--- /dev/null
+++ b/app/src/main/assets/img/marker_red.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#D81E06"><rect fill="none" height="24" width="24"/><path d="M12,2L12,2C8.13,2,5,5.13,5,9c0,1.74,0.5,3.37,1.41,4.84c0.95,1.54,2.2,2.86,3.16,4.4c0.47,0.75,0.81,1.45,1.17,2.26 C11,21.05,11.21,22,12,22h0c0.79,0,1-0.95,1.25-1.5c0.37-0.81,0.7-1.51,1.17-2.26c0.96-1.53,2.21-2.85,3.16-4.4 C18.5,12.37,19,10.74,19,9C19,5.13,15.87,2,12,2z M12,11.75c-1.38,0-2.5-1.12-2.5-2.5s1.12-2.5,2.5-2.5s2.5,1.12,2.5,2.5 S13.38,11.75,12,11.75z"/></svg>
\ No newline at end of file
diff --git a/app/src/main/assets/index.html b/app/src/main/assets/index.html
new file mode 100644
index 0000000..69d3cf5
--- /dev/null
+++ b/app/src/main/assets/index.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>澶╁湴鍥�</title>
+    <style>
+       /* 纭繚 body 鍜� html 鍏呮弧鏁翠釜瑙嗗彛 */
+        html, body {
+            margin: 0;
+            padding: 0;
+            width: 100%;
+            height: 100%;
+            overflow: hidden; /* 闃叉婊氬姩鏉″嚭鐜� */
+        }
+     /* 纭繚鍦板浘瀹瑰櫒鍏呮弧鏁翠釜瑙嗗彛 */
+        #mapDiv {
+            width: 100%;
+            height: 100%;
+            position: absolute; /* 淇濊瘉鍦板浘鍏ㄥ睆 */
+            top: 0;
+            left: 0;
+        }
+    </style>
+    <script src="http://api.tianditu.gov.cn/api?v=4.0&tk=d8beed89b43160a9a185e5aff431f85d"
+        type="text/javascript"></script>
+</head>
+
+<body>
+    <div id="mapDiv"></div>
+    <script src="js/map.js"></script>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/js/map.js b/app/src/main/assets/js/map.js
new file mode 100644
index 0000000..8254aa0
--- /dev/null
+++ b/app/src/main/assets/js/map.js
@@ -0,0 +1,243 @@
+(function () {
+    // 鍥剧墖璺緞
+    const locationIMGPath = 'img/location.png';
+    const markerBalckPath = 'img/marker_black.svg';
+    const markerRedPath = 'img/marker_red.svg';
+
+    let map;
+    let lastMarker = null;
+    let lastClickedMarker = null;
+    let isShowWaterIntakeDetail = false;
+    let zoom=12;
+
+
+    document.addEventListener('DOMContentLoaded', function () {
+
+        initMap();
+        // buttonOverLay();
+        mountMethodToWindow();
+
+    });
+    window.onload = function() {
+          //鍔犺浇鍧愭爣鐐�
+        window.Android.loadMarker();
+    };
+    // 鍒濆鍖栧湴鍥�
+    function initMap() {
+        var imageURL = "http://t0.tianditu.gov.cn/img_w/wmts?" +
+            "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" +
+            "&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=d8beed89b43160a9a185e5aff431f85d";
+        //鍒涘缓鑷畾涔夊浘灞傚璞�
+        var lay = new T.TileLayer(imageURL, { minZoom: 1, maxZoom: 18 });
+        var config = { layers: [lay] };
+        map = new T.Map("mapDiv", config);
+        map.centerAndZoom(new T.LngLat(116.40769, 39.89945), zoom); //鍦板浘鐨勫垵濮嬪寲涓績鐐癸紝姝や负鍖椾含鐨勭粡绾害
+        map.addEventListener("click", closeWaterIntakeDetail);
+    }
+
+    // 鍦板浘鐐瑰嚮鍚庤幏鍙栫粡绾害
+    function getLngLat(lnglat) {
+        console.log(lnglat.lng.toFixed(6) + "," + lnglat.lat.toFixed(6));
+        addClickOverLay(lnglat);
+    }
+
+    // 鐐瑰嚮鍚庢坊鍔犲潗鏍囩偣
+    function addClickOverLay(lnglat) {
+        removeMyOverLay();
+
+        let marker = new T.Marker(
+            new T.LngLat(lnglat.lng, lnglat.lat) // 鍒涘缓鏍囨敞
+        );
+        map.addOverLay(marker); // 灏嗘爣娉ㄦ坊鍔犲埌鍦板浘涓�
+
+        // 璁剧疆寮瑰嚭鐨勭獥鍙f牱寮�
+        let infoWin = new T.InfoWindow();
+        let sContent =
+            "<div style='margin:0px;'>" +
+            "<div style='margin:10px 10px; '>" +
+            "<div >鐢佃瘽 : (010)88187700 <br>鍦板潃锛氬寳浜競椤轰箟鍖烘満鍦轰笢璺浗闂ㄥ晢鍔″尯鍦扮悊淇℃伅浜т笟鍥�2鍙锋ゼ澶╁湴鍥惧ぇ鍘�" +
+            "</div>" +
+            "<input width: 80px;height: 24px; text-align: center; background: #5596de;color: #FFF;border: none;display: block;cursor: pointer;' type='button' value='璺宠浆璇︽儏' onClick=\"showToast()\">" +
+            "</div>" +
+            "</div>";
+        infoWin.setContent(sContent);
+
+        // 娣诲姞鐐瑰嚮浜嬩欢
+        marker.addEventListener("click", function () {
+            marker.openInfoWindow(infoWin);
+        });
+
+        lastMarker = marker;
+    }
+
+    // 鍒犻櫎涓婃鐐瑰嚮鍚庢坊鍔犵殑鏍囨敞
+    function removeMyOverLay() {
+        if (lastMarker !== null) {
+            map.removeOverLay(lastMarker); // 灏嗘爣娉ㄤ粠鍦板浘涓Щ闄�
+        }
+    }
+
+    // 妯℃嫙娣诲姞鍙栨按鍙f爣娉�
+    function buttonOverLay() {
+        map.clearOverLays(); // 娓呯悊鍦板浘涓婄殑鎵�鏈夎鐩栫墿
+
+        let data_info = [
+            [116.417854, 39.921988, "235鍙栨按鍙�"],
+            [116.406605, 39.921585, "237鍙栨按鍙�"],
+            [116.412222, 39.912345, "236鍙栨按鍙�"]
+        ];
+
+        for (let i = 0; i < data_info.length; i++) {
+            let icon = new T.Icon({
+                iconUrl: markerBalckPath,
+                iconSize: new T.Point(27, 27),
+                iconAnchor: new T.Point(10, 25)
+            });
+
+            let marker = new T.Marker(
+                new T.LngLat(data_info[i][0], data_info[i][1]), // 鍒涘缓鏍囨敞
+                { icon: icon }
+            );
+
+            marker.addEventListener("click", function (data) {
+                addMarkerListener(data);
+            });
+
+            map.addOverLay(marker); // 灏嗘爣娉ㄦ坊鍔犲埌鍦板浘涓�
+
+            let label = new T.Label({
+                text: data_info[i][2],
+                position: marker.getLngLat(),
+                offset: new T.Point(-50, 10), // 璁剧疆鏍囨敞鏂囧瓧鐨勪綅缃�
+                opacity: 1, // 璁剧疆鏂囨湰鐨勬樉绀轰笉閫忔槑搴︼紙鑼冨洿0-1锛�
+            });
+            label.setBorderLine(0); // 璁剧疆鏂囨湰鐨勮竟妗嗙嚎瀹�
+            label.setBackgroundColor("transparent"); // 璁剧疆鏂囨湰鐨勮儗鏅壊锛堥�忔槑鑹诧級
+            label.setFontColor("#0000FF");
+            label.setFontSize(10);
+            map.addOverLay(label);
+        }
+    }
+
+    // 鏄剧ず鏍囨敞鐐瑰嚮鍚庣殑绐楀彛
+    function openInfo(content, e) {
+        let point = e.lnglat;
+        let markerInfoWin = new T.InfoWindow(content, {
+            offset: new T.Point(0, -30)
+        });
+        map.openInfoWindow(markerInfoWin, point); // 寮�鍚俊鎭獥鍙�
+    }
+
+    // 鎵嬫満鑾峰彇鍒板畾浣嶅悗鏄剧ず瀹氫綅
+    function locationOverLay(lng, lag) {
+        map.centerAndZoom(new T.LngLat(lng, lag), 18);
+
+        let icon = new T.Icon({
+            iconUrl: locationIMGPath,
+            iconSize: new T.Point(27, 27),
+            iconAnchor: new T.Point(10, 25)
+        });
+
+        let marker = new T.Marker(new T.LngLat(lng, lag), { icon: icon });
+        map.addOverLay(marker);
+    }
+
+    // 灏嗘柟娉曟寕杞藉埌 window 涓�
+    function mountMethodToWindow() {
+        window.locationOverLay = locationOverLay;
+        window.showToast = showToast;
+        window.addMarker = addMarker;
+    }
+
+    // 璋冪敤鍘熺敓瀹夊崜鏂规硶鏄剧ず鍙栨按鍙h鎯�
+    function showWaterIntakeDetail(data) {
+        isShowWaterIntakeDetail = true;
+        window.Android.showWaterIntakeView(data);
+    }
+
+    // 璋冪敤鍘熺敓瀹夊崜鏂规硶闅愯棌鍙栨按鍙h鎯�
+    function closeWaterIntakeDetail(data) {
+        if (lastClickedMarker!== null) {
+            // 濡傛灉鏈夌偣鍑诲彇姘村彛鍒欏皢鍙栨按鍙f仮澶嶆垚榛戣壊
+            // 涓婃鐐瑰嚮鐨勬爣娉ㄦ敼涓洪粦鑹�
+            var defaulticon = new T.Icon({
+              iconUrl: markerBalckPath,
+              iconSize: new T.Point(27, 27),
+              iconAnchor: new T.Point(10, 25)
+            });
+            lastClickedMarker.setIcon(defaulticon);
+          }
+          if (isShowWaterIntakeDetail) {
+            // 鍋囧鏄剧ず浜嗗彇姘村彛璇︽儏鍒欓殣钘忓彇姘村彛璇︽儏
+            isShowWaterIntakeDetail = false;
+            window.Android.closeWaterIntakeView();
+          } else {
+            // 鍋囧娌℃湁鏄剧ず鍙栨按鍙e垯娣诲姞鐐瑰嚮鐨勫潗鏍�
+            getLngLat(data.lnglat);
+          }
+    }
+
+    // 鐐瑰嚮鏍囨敞鐨勪簨浠�
+    function addMarkerListener(data) {
+        chageMarkerIcon(data);
+        showWaterIntakeDetail("妯℃嫙鏁版嵁");
+    }
+
+    // 淇敼鐐瑰嚮鏍囨敞鐨勫浘鏍�
+    function chageMarkerIcon(data) {
+     // 鐐瑰嚮鐨勬爣娉ㄦ敼涓虹孩鑹�
+     var currentMarker = data.target;
+     // 鐐瑰嚮鍚庡浘鏍�
+     var clickedIcon = new T.Icon({
+       iconUrl: markerRedPath,
+       iconSize: new T.Point(27, 27),
+       iconAnchor: new T.Point(10, 25)
+     });
+     // 璁剧疆褰撳墠鐐瑰嚮鐨� marker 涓虹偣鍑诲悗鍥炬爣
+     currentMarker.setIcon(clickedIcon);
+     // 鍒ゆ柇鐐瑰嚮鐨勪笉鏄悓涓�涓潗鏍�
+     if (lastClickedMarker!== null) {
+       if (!isEqualsLngLat(data.target.getLngLat(), lastClickedMarker.getLngLat())) {
+         var defaulticon = new T.Icon({
+           iconUrl: markerBalckPath,
+           iconSize: new T.Point(27, 27),
+           iconAnchor: new T.Point(10, 25)
+         });
+         lastClickedMarker.setIcon(defaulticon);
+       }
+     }
+     lastClickedMarker = data.target;
+    }
+    //璋冨畨鍗撳師鐢�
+    function showToast() {
+        // 璋冪敤 JavaScript 鎺ュ彛瀵硅薄鐨勬柟娉�
+        window.Android.showToast('Hello, Android!');
+    }
+    // 鍒ゆ柇涓や釜鍧愭爣鏄惁涓�鑷�
+    function isEqualsLngLat(data1, data2) {
+        return data1.lat === data2.lat && data1.lng === data2.lng;
+    }
+    //娣诲姞浠庡師鐢熶紶杩囨潵鐨勫潗鏍囧苟鏄剧ず鍦ㄥ湴鍥句笂
+    function addMarker(jsonData) {
+        console.log("function銆嬨�嬨�嬨�嬨�媋ddMarker");
+        var array = JSON.parse(jsonData);
+        var icon = new T.Icon({
+            iconUrl: markerBalckPath,
+            iconSize: new T.Point(27, 27),
+            iconAnchor: new T.Point(10, 25)
+        });
+        array.forEach(element => {
+            let marker = new T.Marker(
+                new T.LngLat(element[0], element[1]) // 鍒涘缓鏍囨敞
+                , { icon: icon });
+            //娣诲姞鐐瑰嚮浜嬩欢
+            marker.addEventListener("click", (data) => {
+                addMarkerListener(data)
+            });
+            map.addOverLay(marker); // 灏嗘爣娉ㄦ坊鍔犲埌鍦板浘涓�
+        });
+        return "addMarker鍔犺浇鎴愬姛"
+    }
+
+
+})();
diff --git a/app/src/main/java/com/dayu/pipirrapp/MyApplication.java b/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
index 6beaa1c..b2eb42f 100644
--- a/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
+++ b/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
@@ -5,7 +5,7 @@
 import com.dayu.pipirrapp.net.ApiManager;
 import com.tencent.bugly.crashreport.CrashReport;
 
-import cn.jpush.android.api.JPushInterface;
+//import cn.jpush.android.api.JPushInterface;
 
 /**
  * author: zuo
@@ -23,8 +23,8 @@
 
         ApiManager.init();
 
-        JPushInterface.setDebugMode(true);
-        JPushInterface.init(this);
+//        JPushInterface.setDebugMode(true);
+//        JPushInterface.init(this);
         CrashReport.initCrashReport(getApplicationContext(), "3d4bcf7046", false);
     }
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
index 52163b4..e06568d 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
@@ -3,16 +3,15 @@
 import android.os.Bundle;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
 import android.widget.Toast;
 
 import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
 import androidx.fragment.app.Fragment;
 
+import com.dayu.pipirrapp.R;
 import com.dayu.pipirrapp.adapter.TabAdapter;
 import com.dayu.pipirrapp.databinding.ActivityMainBinding;
-import com.dayu.pipirrapp.fragment.BaseFragment;
 import com.dayu.pipirrapp.fragment.MainFragment;
 import com.dayu.pipirrapp.fragment.MapFragment;
 import com.dayu.pipirrapp.fragment.MyFragment;
@@ -20,47 +19,49 @@
 import java.util.ArrayList;
 import java.util.List;
 
-
 /**
- *
+ * 棣栭〉
  */
-public class MainActivity extends BaseActivity {
-    ActivityMainBinding binding;
-    List<Fragment> mFragment = new ArrayList<>();
+public class MainActivity extends AppCompatActivity {
+    private ActivityMainBinding binding;
+    private List<Fragment> fragments = new ArrayList<>();
+    private long mExitTime;
 
+    private enum Tab {
+        ORDER, MAP, MY
+    }
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
-
         super.onCreate(savedInstanceState);
         binding = ActivityMainBinding.inflate(LayoutInflater.from(this));
-        MapFragment mapFragment = new MapFragment();
         setContentView(binding.getRoot());
-        mFragment.add(mapFragment);
-        mFragment.add(new MainFragment());
-        mFragment.add(new MyFragment());
+
+        setupFragments();
+        initView();
         initTab();
     }
 
-    private void getPermission(){
-
+    private void setupFragments() {
+        fragments.add(new MainFragment());
+        fragments.add(new MapFragment());
+        fragments.add(new MyFragment());
     }
 
-
+    private void initView() {
+        binding.orderLL.setOnClickListener(v -> changeBottomState(Tab.ORDER));
+        binding.mapLL.setOnClickListener(v -> changeBottomState(Tab.MAP));
+        binding.myLL.setOnClickListener(v -> changeBottomState(Tab.MY));
+    }
 
     private void initTab() {
-        TabAdapter adapter = new TabAdapter(getSupportFragmentManager(), mFragment);
+        TabAdapter adapter = new TabAdapter(getSupportFragmentManager(), fragments);
         binding.viewPager.setAdapter(adapter);
         binding.viewPager.setPagingEnabled(false);
-        //璁剧疆缂撳瓨view 鐨勪釜鏁�
-        binding.viewPager.setOffscreenPageLimit(3);
-        // 灏� ViewPager 涓� TabLayout 鍏宠仈
-        binding.tabLayout.setupWithViewPager(binding.viewPager);
+        binding.viewPager.setOffscreenPageLimit(fragments.size());
+        binding.viewPager.setCurrentItem(1); // 榛樿鏄剧ず鍦板浘椤�
     }
 
-    long mExitTime;
-
-    //鐐瑰嚮涓ゆ閫�鍑虹▼搴� 鏈夋椂闂撮棿闅� 闂撮殧鍐呯偣鍑诲垯閫�鍑虹▼搴� 鍚﹀垯 鍒欐彁绀�
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_BACK) {
@@ -68,11 +69,63 @@
                 Toast.makeText(MainActivity.this, "鍐嶆寜涓�娆¢��鍑虹▼搴�", Toast.LENGTH_SHORT).show();
                 mExitTime = System.currentTimeMillis();
             } else {
-                MainActivity.this.finish();
+                finish();
             }
             return true;
         }
         return super.onKeyDown(keyCode, event);
     }
 
-}
\ No newline at end of file
+    /**
+     * 淇敼搴曢儴鐘舵��
+     */
+    private void changeBottomState(Tab tab) {
+        resetTabState();
+        switch (tab) {
+            case ORDER:
+                updateTabUI(0, R.drawable.bottom_order_white, R.color.white);
+                break;
+            case MAP:
+                updateTabUI(1, R.drawable.bottom_map_white, R.color.white);
+                break;
+            case MY:
+                updateTabUI(2, R.drawable.bottom_my_white, R.color.white);
+                break;
+        }
+    }
+
+    /**
+     * 鏇存柊鏌愪釜 Tab 鐨� UI 鐘舵��
+     */
+    private void updateTabUI(int position, int iconResId, int textColorResId) {
+        binding.viewPager.setCurrentItem(position);
+        switch (position) {
+            case 0:
+                binding.orderImg.setImageDrawable(ContextCompat.getDrawable(this, iconResId));
+                binding.orderText.setTextColor(ContextCompat.getColor(this, textColorResId));
+                break;
+            case 1:
+                binding.mapImg.setImageDrawable(ContextCompat.getDrawable(this, iconResId));
+                binding.mapText.setTextColor(ContextCompat.getColor(this, textColorResId));
+                break;
+            case 2:
+                binding.myImg.setImageDrawable(ContextCompat.getDrawable(this, iconResId));
+                binding.myText.setTextColor(ContextCompat.getColor(this, textColorResId));
+                break;
+        }
+    }
+
+    /**
+     * 閲嶇疆鎵�鏈� Tab 鐨勯粯璁ょ姸鎬�
+     */
+    private void resetTabState() {
+        binding.orderImg.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.bottom_order_black));
+        binding.orderText.setTextColor(ContextCompat.getColor(this, R.color.black));
+
+        binding.mapImg.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.bottom_map_black));
+        binding.mapText.setTextColor(ContextCompat.getColor(this, R.color.black));
+
+        binding.myImg.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.bottom_my_black));
+        binding.myText.setTextColor(ContextCompat.getColor(this, R.color.black));
+    }
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
index 6c07ea7..d2bff28 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -4,30 +4,32 @@
 import android.content.Intent;
 import android.location.LocationManager;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.webkit.JsResult;
-import android.webkit.WebChromeClient;
-import android.webkit.WebSettings;
+import android.webkit.ValueCallback;
+import android.webkit.WebResourceError;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebResourceResponse;
 import android.webkit.WebView;
+import android.webkit.WebViewClient;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.lifecycle.DefaultLifecycleObserver;
-import androidx.lifecycle.LifecycleOwner;
 
 import com.dayu.pipirrapp.databinding.FragmentMapBinding;
 import com.dayu.pipirrapp.js.MyWebViewInterface;
 import com.dayu.pipirrapp.observer.MapFragmenObserver;
 import com.dayu.pipirrapp.service.MyLocationService;
+import com.dayu.pipirrapp.utils.MapJpgUtils;
 import com.dayu.pipirrapp.utils.MyLog;
-import com.dayu.pipirrapp.utils.ToastUtil;
+import com.dayu.pipirrapp.utils.WebViewUtils;
 
-import java.util.List;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.Random;
 
 /**
  * author: zuo
@@ -60,14 +62,54 @@
         binding = FragmentMapBinding.inflate(inflater, container, false);
         Log.i("MapFragment", "onCreateView");
         mWebView = binding.webView;
-        initWebView();
-        mWebView.loadUrl("http://192.168.3.178:3000/");
+        mWebView = WebViewUtils.initWebView(mWebView);
+        MyWebViewInterface myWebViewInterface = new MyWebViewInterface(MapFragment.this);
+        mWebView.addJavascriptInterface(myWebViewInterface, "Android");
+        mWebView.loadUrl("file:///android_asset/index.html");
+
         initView();
         //寮�鍚畾浣�
         Intent location = new Intent(this.getActivity(), MyLocationService.class);
         location.putExtra("isSingle", false);
         this.getActivity().startService(location);
         return binding.getRoot();
+    }
+
+    /**
+     * 娣诲姞鏍囨敞鐐�
+     */
+    public void addMarker() {
+        Random random = new Random();
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append("[");
+
+        // 涓浗缁忕含搴﹁寖鍥�
+        double minLongitude = 73.43;
+        double maxLongitude = 135.05;
+        double minLatitude = 3.52;
+        double maxLatitude = 53.57;
+
+        for (int i = 0; i < 1000; i++) {
+            stringBuilder.append("[");
+            // 鐢熸垚闅忔満缁忓害
+            double longitude = minLongitude + (maxLongitude - minLongitude) * random.nextDouble();
+            stringBuilder.append(longitude);
+            stringBuilder.append(",");
+            // 鐢熸垚闅忔満绾害
+            double latitude = minLatitude + (maxLatitude - minLatitude) * random.nextDouble();
+            stringBuilder.append(latitude);
+            stringBuilder.append(",\"237鍙栨按鍙"],");
+        }
+        stringBuilder.append("[116.417854,39.921988,\"235鍙栨按鍙"]]");
+        String jsonData = stringBuilder.toString().replace("\\", "\\\\").replace("\"", "\\\"");
+//        String jsonData = "[[116.417854,39.921988,\"235鍙栨按鍙"],[116.406605,39.921585,\"237鍙栨按鍙"],[116.412222,39.912345,\"236鍙栨按鍙"]]";
+        Log.i("mWebView", "addMarker????????????" + jsonData);
+        mWebView.evaluateJavascript("javascript:addMarker(\"" + jsonData + "\")", new ValueCallback<String>() {
+            @Override
+            public void onReceiveValue(String value) {
+                Log.i("mWebView", "addMarker锛侊紒锛侊紒锛侊紒锛侊紒锛�" + value);
+            }
+        });
     }
 
 
@@ -81,7 +123,9 @@
     @Override
     public void onPause() {
         super.onPause();
+        //
         mWebView.onPause(); // 閫氳繃 onPause 鍔ㄤ綔閫氱煡鍐呮牳鏆傚仠鎵�鏈夌殑鍔ㄤ綔锛屽 DOM 鐨勮В鏋愩�乸lugin 鐨勬墽琛屻�丣avaScript 鎵ц绛�
+
     }
 
     @Override
@@ -91,73 +135,66 @@
         mWebView.destroy(); // 褰� Activity 瑕� destroy 鏃讹紝搴斿厛灏� WebView 绉婚櫎锛屽啀 destroy 鎺�
     }
 
-    void initWebView() {
-//        getActivity().getWindow().setFlags(
-//                WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
-//                WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
-        // WebView 閰嶇疆
-        WebSettings webSettings = mWebView.getSettings();
-        // 鐢熷懡鍛ㄦ湡
-// 鍓嶈繘鍚庨��
-        if (mWebView.canGoBack()) {
-            mWebView.goBack();
-        }
-        if (mWebView.canGoForward()) {
-            mWebView.goForward();
-        }
-        // 缂撳瓨鐩稿叧
-        mWebView.clearCache(false); // 娓呴櫎缂撳瓨
-//        mWebView.clearHistory(); // 娓呴櫎鍘嗗彶
-//        mWebView.clearFormData(); // 娓呴櫎琛ㄥ崟鏁版嵁
-        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);// 璁剧疆缂撳瓨妯″紡
-        webSettings.setDatabaseEnabled(true);
-        webSettings.setDomStorageEnabled(true);//寮�鍚疍OM缂撳瓨锛屽叧闂殑璇滺5鑷韩鐨勪竴浜涙搷浣滄槸鏃犳晥鐨�
-// 缂撳瓨妯″紡
-//        LOAD_DEFAULT: 榛樿锛屾牴鎹� cache-control 鍐冲畾鏄惁浠庣綉缁滀笂鍙栨暟鎹�
-//        LOAD_NORMAL: API level 17 涓凡缁忓簾寮�, 浠嶢PI level 11寮�濮嬩綔鐢ㄥ悓 LOAD_DEFAULT 妯″紡
-//        LOAD_CACHE_ELSE_NETWORK: 鍙鏈湴鏈夛紝鏃犺鏄惁杩囨湡锛屾垨鑰� no-cache锛岄兘浣跨敤缂撳瓨涓殑鏁版嵁
-//        LOAD_NO_CACHE: 涓嶄娇鐢ㄧ紦瀛橈紝鍙粠缃戠粶鑾峰彇鏁版嵁
-//        LOAD_CACHE_ONLY: 涓嶄娇鐢ㄧ綉缁滐紝鍙鍙栨湰鍦扮紦瀛樻暟鎹�
-        // js 鐩稿叧
-        webSettings.setJavaScriptEnabled(true); // 鏀寔 js銆傚鏋滅鍒板悗鍙版棤娉曢噴鏀� js 瀵艰嚧鑰楃數锛屽簲鍦� onStop 鍜� onResume 閲屽垎鍒鎴� false 鍜� true
-       //        mWebView.addJavascriptInterface(new WebAppInterface(this), "android"); // js 鎺ュ彛
-
-        //        webSettings.setPluginsEnabled(true); // 鏀寔鎻掍欢
-        // 璁剧疆鑷�傚簲灞忓箷锛屼袱鑰呭悎鐢�
-        webSettings.setUseWideViewPort(true); // 灏嗗浘鐗囪皟鏁村埌閫傚悎 WebView 鐨勫ぇ灏�
-        webSettings.setLoadWithOverviewMode(true); // 缂╂斁鑷冲睆骞曠殑澶у皬
-        // 缂╂斁鎿嶄綔
-        webSettings.setSupportZoom(true); // 鏀寔缂╂斁锛岄粯璁や负 true
-        webSettings.setBuiltInZoomControls(true); // 璁剧疆鍐呯疆鐨勭缉鏀炬帶浠讹紝鑻ヤ负 false锛屽垯璇� WebView 涓嶅彲缂╂斁
-        webSettings.setDisplayZoomControls(false); // 闅愯棌鍘熺敓鐨勭缉鏀炬帶浠�
-        webSettings.setLoadsImagesAutomatically(true);//棰勫姞杞�
-        //webView寮笿sAlert
-        mWebView.setWebChromeClient(new WebChromeClient() {
-            @Override
-            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
-                return super.onJsAlert(view, url, message, result);
-            }
-        });
-        MyWebViewInterface myWebViewInterface=new MyWebViewInterface(this);
-        mWebView.addJavascriptInterface(myWebViewInterface,"Android");
-    }
 
     void initView() {
+        //璺宠浆鍒版寚瀹氫綅缃�
         binding.flyBtn.setOnClickListener(v -> {
             mWebView.evaluateJavascript("javascript:locationOverLay(116.399565,39.89432)", value -> {
             });
         });
+        mWebView.setWebViewClient(new WebViewClient() {
+            @Override
+            public WebResourceResponse  shouldInterceptRequest(WebView view, WebResourceRequest request) {
+                String url = request.getUrl().toString();
+                // 妫�鏌ユ湰鍦扮紦瀛�
+                File cachedTile = MapJpgUtils.getInsatance(MapFragment.this.getContext()).getCachedTile(url);
+                if (cachedTile != null && cachedTile.exists()) {
+                    // 鍒ゆ柇缂撳瓨鏄惁杩囨湡
+                    if (!MapJpgUtils.getInsatance(MapFragment.this.getContext()).isCacheExpired(cachedTile)) {
+                        try {
+                            // 浠庣紦瀛樺姞杞界摝鐗�
+                            return new WebResourceResponse("image/jpg", "utf-8", new FileInputStream(cachedTile));
+                        } catch (FileNotFoundException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+
+                return super.shouldInterceptRequest(view, request);
+            }
+
+            @Override
+            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
+                super.onReceivedError(view, request, error);
+                // 鎹曡幏鍔犺浇杩囩▼涓彂鐢熺殑閿欒
+                int errorCode = error.getErrorCode();
+                String description = error.getDescription().toString();
+                String failingUrl = request.getUrl().toString();
+                Log.e("setWebViewClient", "errorCode:" + errorCode + ">>>>description:" + description + ">>>>failingUrl:" + failingUrl);
+                // 澶勭悊閿欒锛屼緥濡傛樉绀洪敊璇〉闈㈡垨鎻愮ず鐢ㄦ埛
+                // view.loadUrl("file:///android_asset/error.html");
+            }
+
+            @Override
+            public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
+                super.onReceivedHttpError(view, request, errorResponse);
+                // 鎹曡幏HTTP閿欒锛堝404, 500绛夛級
+                int statusCode = errorResponse.getStatusCode();
+                String description = errorResponse.getReasonPhrase();
+                Log.e("setWebViewClient", "statusCode:" + statusCode + ">>>>description:" + description);
+                // 鏍规嵁HTTP鐘舵�佺爜澶勭悊閿欒
+            }
+        });
     }
 
 
-    public void showWaterIntakeDetail(String data){
+    public void showWaterIntakeDetail(String data) {
         MyLog.i(data);
         binding.bottomLL.setVisibility(View.VISIBLE);
     }
 
 
-
-    public void closeWaterIntakeDetail(){
+    public void closeWaterIntakeDetail() {
         binding.bottomLL.setVisibility(View.GONE);
     }
 
diff --git a/app/src/main/java/com/dayu/pipirrapp/js/MyWebViewInterface.java b/app/src/main/java/com/dayu/pipirrapp/js/MyWebViewInterface.java
index b453c5c..56fb79b 100644
--- a/app/src/main/java/com/dayu/pipirrapp/js/MyWebViewInterface.java
+++ b/app/src/main/java/com/dayu/pipirrapp/js/MyWebViewInterface.java
@@ -1,6 +1,5 @@
 package com.dayu.pipirrapp.js;
 
-import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
 import android.webkit.JavascriptInterface;
@@ -66,4 +65,22 @@
         }
     }
 
+    @JavascriptInterface
+    public void loadMarker(){
+        if (myContext instanceof MapFragment) {
+            new Handler(Looper.getMainLooper()).post(new Runnable() {
+                @Override
+                public void run() {
+                    // 鍦ㄤ富绾跨▼涓婃墽琛孶I鎿嶄綔
+                    // 鏇存柊鎴栨搷浣淯I鍏冪礌鐨勪唬鐮�
+                    myContext.addMarker();
+                }
+            });
+        }
+    }
+
+
+
+
+
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
index 186cf43..58a4dd0 100644
--- a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
+++ b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
@@ -1,38 +1,27 @@
 package com.dayu.pipirrapp.net;
 
 import android.content.Context;
-
+import android.util.Log;
 
 import com.dayu.pipirrapp.bean.WeatherResponse;
 import com.dayu.pipirrapp.net.subscribers.BaseProgressSubscriber;
 import com.dayu.pipirrapp.net.subscribers.ProgressSubscriber;
 import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
+import com.dayu.pipirrapp.utils.MapJpgUtils;
 import com.dayu.pipirrapp.utils.MyJsonParser;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 
 import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
-import io.reactivex.rxjava3.annotations.NonNull;
 import io.reactivex.rxjava3.core.Observable;
-import io.reactivex.rxjava3.core.Observer;
-import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.disposables.CompositeDisposable;
 import io.reactivex.rxjava3.functions.Function;
 import io.reactivex.rxjava3.schedulers.Schedulers;
-import okhttp3.MediaType;
-import okhttp3.MultipartBody;
-import okhttp3.RequestBody;
 import okhttp3.ResponseBody;
 import retrofit2.Call;
 import retrofit2.Callback;
-import retrofit2.Response;
 
 
 /**
@@ -43,11 +32,14 @@
  */
 public class ApiManager {
 
+    static String TAG = "ApiManager";
+
     static ApiManager apiManager;
     //鏂囦欢涓婁紶澶辫触閲嶅娆℃暟
     int uplodFilerepeatSize = 3;
 
     ApiService apiService;
+    private CompositeDisposable compositeDisposable = new CompositeDisposable(); // 绠$悊璁㈤槄浜嬩欢
 
     /**
      * 鍒濆鍖栭�氫俊妗嗘灦
@@ -60,6 +52,7 @@
 
     public ApiManager() {
         apiService = RetrofitClient.getInstance().getApiService();
+
     }
 
     public static ApiManager getInstance() {
@@ -157,14 +150,14 @@
     }
 
 
-
     /**
-     *  鑾峰彇澶╂皵
-     * @param data 缁忕含搴︼紙鏍煎紡鏄� 绾害:缁忓害锛岃嫳鏂囧啋鍙峰垎闅旓級
+     * 鑾峰彇澶╂皵
+     *
+     * @param data     缁忕含搴︼紙鏍煎紡鏄� 绾害:缁忓害锛岃嫳鏂囧啋鍙峰垎闅旓級
      * @param callback
      * @param <T>
      */
-    public <T> void requestWeather(String data,Callback<WeatherResponse> callback) {
+    public <T> void requestWeather(String data, Callback<WeatherResponse> callback) {
         Map<String, Object> params = new HashMap<>();
         params.put("key", "S6Tq4pvOakMuWRrg0");
         params.put("location", data);
@@ -176,4 +169,39 @@
     }
 
 
+    public void donwLoadTile(Context context, String urlPath) {
+        Observable<ResponseBody> observable;
+        observable = apiService.downloadTile(urlPath);
+
+
+        compositeDisposable.add(
+                observable
+                        .subscribeOn(Schedulers.io())  // 缃戠粶璇锋眰鍦� I/O 绾跨▼涓繘琛�
+                        .observeOn(Schedulers.io())    // 鍥炶皟澶勭悊涔熷湪 I/O 绾跨▼
+                        .subscribe(
+                                responseBody -> {
+                                    boolean success = false;
+                                    if (!MapJpgUtils.getInsatance(context).isHasFiles(urlPath)) {
+                                        success = MapJpgUtils.getInsatance(context).saveTileToCache(urlPath, responseBody);
+                                    }
+                                    if (success) {
+                                        Log.d(TAG, "Download success for tile: " + urlPath);
+                                    } else {
+                                        Log.e(TAG, "Failed to save tile to disk: " + urlPath);
+                                    }
+                                },
+                                throwable -> Log.e(TAG, "Download failed for tile: " + urlPath)
+                        )
+        );
+
+
+    }
+
+    // 鍋滄绾跨▼姹狅紝閲婃斁璧勬簮
+    public void clearDisposables() {
+        if (!compositeDisposable.isDisposed()) {
+            compositeDisposable.dispose();
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/ApiService.java b/app/src/main/java/com/dayu/pipirrapp/net/ApiService.java
index 5c29ff7..c725a0a 100644
--- a/app/src/main/java/com/dayu/pipirrapp/net/ApiService.java
+++ b/app/src/main/java/com/dayu/pipirrapp/net/ApiService.java
@@ -1,7 +1,6 @@
 package com.dayu.pipirrapp.net;
 
 
-
 import com.dayu.pipirrapp.bean.WeatherResponse;
 
 import java.util.Map;
@@ -58,4 +57,8 @@
     @POST(Constants.BASE_URL + "file/upload")
     Call<BaseResponse> uploadFile(@Part("description") RequestBody description, @Part MultipartBody.Part file);
 
+
+    @GET("{url}}")
+    Observable<ResponseBody> downloadTile(@Path("url") String url);
+
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/service/MyCommonService.java b/app/src/main/java/com/dayu/pipirrapp/service/MyCommonService.java
index 46f6593..35b0fe4 100644
--- a/app/src/main/java/com/dayu/pipirrapp/service/MyCommonService.java
+++ b/app/src/main/java/com/dayu/pipirrapp/service/MyCommonService.java
@@ -1,6 +1,6 @@
 package com.dayu.pipirrapp.service;
 
-import cn.jpush.android.service.JCommonService;
+//import cn.jpush.android.service.JCommonService;
 
 /**
  * author: zuo
@@ -8,5 +8,5 @@
  * Time: 11:51
  * 澶囨敞锛�
  */
-public class MyCommonService extends JCommonService {
-}
+//public class MyCommonService extends JCommonService {
+//}
diff --git a/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java b/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java
index 7eb9e0e..f3c75e0 100644
--- a/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java
+++ b/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java
@@ -87,7 +87,7 @@
         super.onCreate();
 
         createNativeLocation();
-        createBDLocation();
+//        createBDLocation();
     }
 
 
@@ -252,10 +252,10 @@
             if (locationManager != null) {
                 locationManager.removeUpdates(listener);
             }
-            if (mBDLocationClient != null) {
-                mBDLocationClient.stop();
-                mBDLocationClient.unRegisterLocationListener(mBDLocationListener);
-            }
+//            if (mBDLocationClient != null) {
+//                mBDLocationClient.stop();
+//                mBDLocationClient.unRegisterLocationListener(mBDLocationListener);
+//            }
 
         } catch (Exception e) {
             CrashReport.postCatchedException(e);
diff --git a/app/src/main/java/com/dayu/pipirrapp/service/PushService.java b/app/src/main/java/com/dayu/pipirrapp/service/PushService.java
index 0163877..b6359dd 100644
--- a/app/src/main/java/com/dayu/pipirrapp/service/PushService.java
+++ b/app/src/main/java/com/dayu/pipirrapp/service/PushService.java
@@ -1,12 +1,6 @@
 package com.dayu.pipirrapp.service;
 
-import android.app.Service;
-import android.content.Intent;
-import android.os.IBinder;
-
-import androidx.annotation.Nullable;
-
-import cn.jpush.android.service.JPushMessageService;
+//import cn.jpush.android.service.JPushMessageService;
 
 /**
  * author: zuo
@@ -14,6 +8,6 @@
  * Time: 10:29
  * 澶囨敞锛氭帹閫佺殑鏈嶅姟
  */
-public class PushService extends JPushMessageService {
-
-}
+//public class PushService extends JPushMessageService {
+//
+//}
diff --git a/app/src/main/java/com/dayu/pipirrapp/tool/RocketMQConsumer.java b/app/src/main/java/com/dayu/pipirrapp/tool/RocketMQConsumer.java
new file mode 100644
index 0000000..2ab6fac
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/tool/RocketMQConsumer.java
@@ -0,0 +1,62 @@
+package com.dayu.pipirrapp.tool;
+
+import android.util.Log;
+
+import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
+import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
+import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
+import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
+import org.apache.rocketmq.client.exception.MQClientException;
+import org.apache.rocketmq.common.message.MessageExt;
+
+import java.util.List;
+
+/**
+ * author: zuo
+ * Date: 2024-09-03
+ * Time: 13:51
+ * 澶囨敞锛歁Q娑堟伅闃熷垪妯″潡
+ */
+public class RocketMQConsumer {
+
+    private DefaultMQPushConsumer consumer;
+
+    public void start() {
+        try {
+            // 鍒涘缓涓�涓秷璐硅�呭疄渚�
+            consumer = new DefaultMQPushConsumer("YourConsumerGroup");
+
+            // 璁剧疆NameServer鍦板潃
+            consumer.setNamesrvAddr("YourNameServerAddress");
+
+            // 璁㈤槄涓�涓垨澶氫釜Topic
+            consumer.subscribe("YourTopic", "*");
+
+            // 娉ㄥ唽娑堟伅鐩戝惉鍣�
+            consumer.registerMessageListener(new MessageListenerConcurrently() {
+                @Override
+                public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
+                    for (MessageExt msg : msgs) {
+                        // 澶勭悊娑堟伅
+                        Log.d("RocketMQ", "Receive message: " + new String(msg.getBody()));
+                        // 杩欓噷鍙互瑙﹀彂鏈湴閫氱煡鎴栬�呮洿鏂癠I
+                    }
+                    return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
+                }
+            });
+
+            // 鍚姩娑堣垂鑰�
+            consumer.start();
+
+        } catch (MQClientException e) {
+            e.printStackTrace();
+            Log.e("RocketMQ", "Consumer failed to start: " + e.getMessage());
+        }
+    }
+
+    public void stop() {
+        if (consumer != null) {
+            consumer.shutdown();
+        }
+    }
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java b/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java
new file mode 100644
index 0000000..80c5055
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java
@@ -0,0 +1,150 @@
+package com.dayu.pipirrapp.utils;
+
+import android.content.Context;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import okhttp3.ResponseBody;
+
+/**
+ * author: zuo
+ * Date: 2024-09-06
+ * Time: 17:59
+ * 澶囨敞锛� 瀹屾垚鍦板浘缂撳瓨绛栫暐
+ */
+public class MapJpgUtils {
+    static MapJpgUtils mapJpgUtils;
+    Context context;
+
+    public static MapJpgUtils getInsatance(Context context) {
+        if (mapJpgUtils == null) {
+            mapJpgUtils = new MapJpgUtils();
+        }
+        mapJpgUtils.context = context;
+        return mapJpgUtils;
+    }
+
+
+    // 鑾峰彇缂撳瓨鐡︾墖鏂囦欢
+    public File getCachedTile(String url) {
+        String fileName = hashUrl(url);  // URL 杞崲涓哄敮涓�鐨勫搱甯屽�兼垨鏂囦欢鍚�
+        File cacheDir = new File(context.getCacheDir(), "mapCache");  // 鐡︾墖瀛樺偍鐩綍
+        if (!cacheDir.exists()) {
+            cacheDir.mkdirs();
+        }
+        return new File(cacheDir, fileName);
+    }
+
+    // 浣跨敤 MD5 鍝堝笇 URL 浣滀负鏂囦欢鍚�
+    private String hashUrl(String url) {
+        try {
+            MessageDigest digest = MessageDigest.getInstance("MD5");
+            digest.update(url.getBytes());
+            byte[] hashBytes = digest.digest();
+            StringBuilder sb = new StringBuilder();
+            for (byte b : hashBytes) {
+                sb.append(String.format("%02x", b));
+            }
+            return sb.toString();
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+            return String.valueOf(url.hashCode());
+        }
+    }
+
+    // 淇濆瓨鐡︾墖鍒扮紦瀛�
+    public boolean saveTileToCache(String url, ResponseBody body) {
+
+        try {
+            File tileFile = new File(context.getCacheDir() + File.separator + hashUrl(url) + ".png");
+
+            if (!tileFile.getParentFile().exists()) {
+                tileFile.getParentFile().mkdirs();
+            }
+
+            InputStream inputStream = null;
+            OutputStream outputStream = null;
+
+            try {
+                byte[] fileReader = new byte[4096];
+                long fileSizeDownloaded = 0;
+
+                inputStream = body.byteStream();
+                outputStream = new FileOutputStream(tileFile);
+
+                while (true) {
+                    int read = inputStream.read(fileReader);
+
+                    if (read == -1) {
+                        break;
+                    }
+                    outputStream.write(fileReader, 0, read);
+                    fileSizeDownloaded += read;
+                }
+
+                outputStream.flush();
+                // 淇濆瓨瀹屾垚鍚庯紝璁板綍缂撳瓨鍒涘缓鏃堕棿
+                tileFile.setLastModified(System.currentTimeMillis());
+                return true;
+            } catch (Exception e) {
+                return false;
+            } finally {
+                if (inputStream != null) {
+                    inputStream.close();
+                }
+                if (outputStream != null) {
+                    outputStream.close();
+                }
+            }
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    /**
+     * 鍒ゆ柇鏂囦欢鏄惁瀛樺湪
+     *
+     * @param url
+     * @return
+     */
+    public boolean isHasFiles(String url) {
+        String fileName = hashUrl(url);  // URL 杞崲涓哄敮涓�鐨勫搱甯屽�兼垨鏂囦欢鍚�
+        File cacheDir = new File(context.getCacheDir(), "mapCache");  // 鐡︾墖瀛樺偍鐩綍
+        if (!cacheDir.exists()) {
+            cacheDir.mkdirs();
+        }
+        if (new File(cacheDir, fileName).exists()) {
+            return true;
+        }
+        return false;
+    }
+
+    // 鍒ゆ柇缂撳瓨鏄惁杩囨湡
+    public boolean isCacheExpired(File cachedFile) {
+        final long cacheValidity = 24 * 60 * 60 * 1000; // 1 澶╂湁鏁堟湡
+        long lastModified = cachedFile.lastModified();
+        return (System.currentTimeMillis() - lastModified) > cacheValidity;
+    }
+
+    // 娓呯悊鏃х紦瀛�
+    private void clearOldCacheFiles() {
+        File cacheDir = new File(context.getCacheDir(), "mapCache");
+        if (cacheDir.exists()) {
+            File[] files = cacheDir.listFiles();
+            if (files != null) {
+                for (File file : files) {
+                    // 娓呯悊瓒呰繃 7 澶╃殑缂撳瓨鏂囦欢
+                    if (System.currentTimeMillis() - file.lastModified() > 7 * 24 * 60 * 60 * 1000) {
+                        file.delete();
+                    }
+                }
+            }
+        }
+    }
+
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/utils/WebViewUtils.java b/app/src/main/java/com/dayu/pipirrapp/utils/WebViewUtils.java
new file mode 100644
index 0000000..d7d04bb
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/utils/WebViewUtils.java
@@ -0,0 +1,85 @@
+package com.dayu.pipirrapp.utils;
+
+import android.util.Log;
+import android.webkit.ConsoleMessage;
+import android.webkit.JsResult;
+import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+
+/**
+ * author: zuo
+ * Date: 2024-09-03
+ * Time: 15:43
+ * 澶囨敞锛�
+ */
+public class WebViewUtils {
+
+
+    public static WebView initWebView(WebView mWebView) {
+
+//        getActivity().getWindow().setFlags(
+//                WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
+//                WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
+        // WebView 閰嶇疆
+        WebSettings webSettings = mWebView.getSettings();
+        // 鐢熷懡鍛ㄦ湡
+// 鍓嶈繘鍚庨��
+        if (mWebView.canGoBack()) {
+            mWebView.goBack();
+        }
+        if (mWebView.canGoForward()) {
+            mWebView.goForward();
+        }
+
+        // 缂撳瓨鐩稿叧
+        mWebView.clearCache(false); // 娓呴櫎缂撳瓨
+//        mWebView.clearHistory(); // 娓呴櫎鍘嗗彶
+//        mWebView.clearFormData(); // 娓呴櫎琛ㄥ崟鏁版嵁
+        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);// 璁剧疆缂撳瓨妯″紡
+        webSettings.setDatabaseEnabled(true);
+        webSettings.setDomStorageEnabled(true);//寮�鍚疍OM缂撳瓨锛屽叧闂殑璇滺5鑷韩鐨勪竴浜涙搷浣滄槸鏃犳晥鐨�
+// 缂撳瓨妯″紡
+//        LOAD_DEFAULT: 榛樿锛屾牴鎹� cache-control 鍐冲畾鏄惁浠庣綉缁滀笂鍙栨暟鎹�
+//        LOAD_NORMAL: API level 17 涓凡缁忓簾寮�, 浠嶢PI level 11寮�濮嬩綔鐢ㄥ悓 LOAD_DEFAULT 妯″紡
+//        LOAD_CACHE_ELSE_NETWORK: 鍙鏈湴鏈夛紝鏃犺鏄惁杩囨湡锛屾垨鑰� no-cache锛岄兘浣跨敤缂撳瓨涓殑鏁版嵁
+//        LOAD_NO_CACHE: 涓嶄娇鐢ㄧ紦瀛橈紝鍙粠缃戠粶鑾峰彇鏁版嵁
+//        LOAD_CACHE_ONLY: 涓嶄娇鐢ㄧ綉缁滐紝鍙鍙栨湰鍦扮紦瀛樻暟鎹�
+        // js 鐩稿叧
+        webSettings.setJavaScriptEnabled(true); // 鏀寔 js銆傚鏋滅鍒板悗鍙版棤娉曢噴鏀� js 瀵艰嚧鑰楃數锛屽簲鍦� onStop 鍜� onResume 閲屽垎鍒鎴� false 鍜� true
+        //        mWebView.addJavascriptInterface(new WebAppInterface(this), "android"); // js 鎺ュ彛
+
+        //        webSettings.setPluginsEnabled(true); // 鏀寔鎻掍欢
+        // 璁剧疆鑷�傚簲灞忓箷锛屼袱鑰呭悎鐢�
+        webSettings.setUseWideViewPort(true); // 灏嗗浘鐗囪皟鏁村埌閫傚悎 WebView 鐨勫ぇ灏�
+        webSettings.setLoadWithOverviewMode(true); // 缂╂斁鑷冲睆骞曠殑澶у皬
+        // 缂╂斁鎿嶄綔
+        webSettings.setSupportZoom(true); // 鏀寔缂╂斁锛岄粯璁や负 true
+        webSettings.setBuiltInZoomControls(true); // 璁剧疆鍐呯疆鐨勭缉鏀炬帶浠讹紝鑻ヤ负 false锛屽垯璇� WebView 涓嶅彲缂╂斁
+        webSettings.setDisplayZoomControls(false); // 闅愯棌鍘熺敓鐨勭缉鏀炬帶浠�
+        webSettings.setLoadsImagesAutomatically(true);//棰勫姞杞�
+        //娣诲姞璁块棶鏉冮檺
+        webSettings.setAllowFileAccess(true);
+        webSettings.setAllowFileAccessFromFileURLs(true);
+        webSettings.setAllowUniversalAccessFromFileURLs(true);
+
+        //webView寮笿sAlert
+        mWebView.setWebChromeClient(new WebChromeClient() {
+            @Override
+            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
+                return super.onJsAlert(view, url, message, result);
+            }
+            @Override
+            public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
+                Log.d("WebView", consoleMessage.message()
+                        + " -- From line "
+                        + consoleMessage.lineNumber() + " of "
+                        + consoleMessage.sourceId());
+                return true;
+            }
+        });
+
+
+        return mWebView;
+    }
+}
diff --git a/app/src/main/res/drawable/bottom_circle_bg.xml b/app/src/main/res/drawable/bottom_circle_bg.xml
new file mode 100644
index 0000000..5ee26e0
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_circle_bg.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/bottom_color" /> <!-- 鎸夐挳鐨勮儗鏅壊 -->
+    <corners android:radius="90dp" /> <!-- 璁╂寜閽殑鍥涗釜瑙掑彉鎴愬渾褰� -->
+    <size android:width="200dp" android:height="100dp" /> <!-- 璁剧疆鎸夐挳鐨勫楂� -->
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bottom_map_black.xml b/app/src/main/res/drawable/bottom_map_black.xml
new file mode 100644
index 0000000..2bf984e
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_map_black.xml
@@ -0,0 +1,28 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+  <path
+      android:pathData="M24,44C35.046,44 44,35.046 44,24C44,12.954 35.046,4 24,4C12.954,4 4,12.954 4,24C4,35.046 12.954,44 24,44Z"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#333"/>
+  <path
+      android:pathData="M4,20.84C7.015,19.417 9.245,19.219 10.689,20.245C12.857,21.786 13.128,28.064 18.058,25.063C22.987,22.063 15.947,20.84 17.475,16.494C19.003,12.147 24.008,15.524 24.506,10.763C24.837,7.589 21.041,6.374 13.116,7.119"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#333"/>
+  <path
+      android:pathData="M36,8C30.286,12.989 28.29,16.001 30.013,17.037C32.597,18.592 33.693,16.403 36.847,17.037C40,17.671 39.317,21.946 37.659,21.946C36,21.946 27.41,20.852 27.843,25.865C28.275,30.878 33.442,31.62 33.442,34.421C33.442,36.288 32.299,39.146 30.013,42.994"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#333"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M6.104,32.926C7.016,32.529 7.701,32.237 8.16,32.052C12.007,30.498 14.862,30.131 16.724,30.953C20.016,32.406 18.75,35.34 19.782,36.421C20.813,37.502 23.388,37.188 23.388,39.244C23.388,40.615 22.927,42.164 22.007,43.89"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#333"
+      android:strokeLineCap="round"/>
+</vector>
diff --git a/app/src/main/res/drawable/bottom_map_white.xml b/app/src/main/res/drawable/bottom_map_white.xml
new file mode 100644
index 0000000..e589b3b
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_map_white.xml
@@ -0,0 +1,28 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M24,44C35.046,44 44,35.046 44,24C44,12.954 35.046,4 24,4C12.954,4 4,12.954 4,24C4,35.046 12.954,44 24,44Z"
+        android:strokeWidth="4"
+        android:strokeColor="#fff" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M4,20.84C7.015,19.417 9.245,19.219 10.689,20.245C12.857,21.786 13.128,28.064 18.058,25.063C22.987,22.063 15.947,20.84 17.475,16.494C19.003,12.147 24.008,15.524 24.506,10.763C24.837,7.589 21.041,6.374 13.116,7.119"
+        android:strokeWidth="4"
+        android:strokeColor="#fff" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M36,8C30.286,12.989 28.29,16.001 30.013,17.037C32.597,18.592 33.693,16.403 36.847,17.037C40,17.671 39.317,21.946 37.659,21.946C36,21.946 27.41,20.852 27.843,25.865C28.275,30.878 33.442,31.62 33.442,34.421C33.442,36.288 32.299,39.146 30.013,42.994"
+        android:strokeWidth="4"
+        android:strokeColor="#fff"
+        android:strokeLineCap="round" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M6.104,32.926C7.016,32.529 7.701,32.237 8.16,32.052C12.007,30.498 14.862,30.131 16.724,30.953C20.016,32.406 18.75,35.34 19.782,36.421C20.813,37.502 23.388,37.188 23.388,39.244C23.388,40.615 22.927,42.164 22.007,43.89"
+        android:strokeWidth="4"
+        android:strokeColor="#fff"
+        android:strokeLineCap="round" />
+</vector>
diff --git a/app/src/main/res/drawable/bottom_my_black.xml b/app/src/main/res/drawable/bottom_my_black.xml
new file mode 100644
index 0000000..ea809b9
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_my_black.xml
@@ -0,0 +1,27 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+  <path
+      android:pathData="M24,44C35.046,44 44,35.046 44,24C44,12.954 35.046,4 24,4C12.954,4 4,12.954 4,24C4,35.046 12.954,44 24,44Z"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:fillType="evenOdd"
+      android:strokeColor="#333"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M24,23C26.761,23 29,20.761 29,18C29,15.239 26.761,13 24,13C21.239,13 19,15.239 19,18C19,20.761 21.239,23 24,23Z"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#333"/>
+  <path
+      android:pathData="M10.022,38.332C10.366,33.121 14.702,29 20,29H28C33.291,29 37.623,33.11 37.977,38.311"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#333"
+      android:strokeLineCap="round"/>
+</vector>
diff --git a/app/src/main/res/drawable/bottom_my_white.xml b/app/src/main/res/drawable/bottom_my_white.xml
new file mode 100644
index 0000000..139782e
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_my_white.xml
@@ -0,0 +1,27 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+    <path
+        android:pathData="M24,44C35.046,44 44,35.046 44,24C44,12.954 35.046,4 24,4C12.954,4 4,12.954 4,24C4,35.046 12.954,44 24,44Z"
+        android:strokeLineJoin="round"
+        android:strokeWidth="4"
+        android:fillColor="#00000000"
+        android:fillType="evenOdd"
+        android:strokeColor="#fff"
+        android:strokeLineCap="round"/>
+    <path
+        android:pathData="M24,23C26.761,23 29,20.761 29,18C29,15.239 26.761,13 24,13C21.239,13 19,15.239 19,18C19,20.761 21.239,23 24,23Z"
+        android:strokeLineJoin="round"
+        android:strokeWidth="4"
+        android:fillColor="#00000000"
+        android:strokeColor="#fff"/>
+    <path
+        android:pathData="M10.022,38.332C10.366,33.121 14.702,29 20,29H28C33.291,29 37.623,33.11 37.977,38.311"
+        android:strokeLineJoin="round"
+        android:strokeWidth="4"
+        android:fillColor="#00000000"
+        android:strokeColor="#fff"
+        android:strokeLineCap="round"/>
+</vector>
diff --git a/app/src/main/res/drawable/bottom_order_black.xml b/app/src/main/res/drawable/bottom_order_black.xml
new file mode 100644
index 0000000..049673d
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_order_black.xml
@@ -0,0 +1,26 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+  <path
+      android:pathData="M33.05,7H38C39.105,7 40,7.895 40,9V42C40,43.105 39.105,44 38,44H10C8.895,44 8,43.105 8,42L8,9C8,7.895 8.895,7 10,7H16H17V10H31V7H33.05Z"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#333"/>
+  <path
+      android:pathData="M17,4h14v6h-14z"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#333"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M27,19L19,27.001H29.004L21,35.002"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#333"
+      android:strokeLineCap="round"/>
+</vector>
diff --git a/app/src/main/res/drawable/bottom_order_white.xml b/app/src/main/res/drawable/bottom_order_white.xml
new file mode 100644
index 0000000..339b3b4
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_order_white.xml
@@ -0,0 +1,26 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+    <path
+        android:pathData="M33.05,7H38C39.105,7 40,7.895 40,9V42C40,43.105 39.105,44 38,44H10C8.895,44 8,43.105 8,42L8,9C8,7.895 8.895,7 10,7H16H17V10H31V7H33.05Z"
+        android:strokeLineJoin="round"
+        android:strokeWidth="4"
+        android:fillColor="#00000000"
+        android:strokeColor="#ffffff"/>
+    <path
+        android:pathData="M17,4h14v6h-14z"
+        android:strokeLineJoin="round"
+        android:strokeWidth="4"
+        android:fillColor="#00000000"
+        android:strokeColor="#fff"
+        android:strokeLineCap="round"/>
+    <path
+        android:pathData="M27,19L19,27.001H29.004L21,35.002"
+        android:strokeLineJoin="round"
+        android:strokeWidth="4"
+        android:fillColor="#00000000"
+        android:strokeColor="#fff"
+        android:strokeLineCap="round"/>
+</vector>
diff --git a/app/src/main/res/drawable/vector_adjust.xml b/app/src/main/res/drawable/vector_adjust.xml
new file mode 100644
index 0000000..85ad1a6
--- /dev/null
+++ b/app/src/main/res/drawable/vector_adjust.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,2C6.49,2 2,6.49 2,12s4.49,10 10,10 10,-4.49 10,-10S17.51,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM15,12c0,1.66 -1.34,3 -3,3s-3,-1.34 -3,-3 1.34,-3 3,-3 3,1.34 3,3z"/>
+</vector>
diff --git a/app/src/main/res/drawable/vector_btn_date.xml b/app/src/main/res/drawable/vector_btn_date.xml
new file mode 100644
index 0000000..af31c7f
--- /dev/null
+++ b/app/src/main/res/drawable/vector_btn_date.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#CCCCCC"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M9,11L7,11v2h2v-2zM13,11h-2v2h2v-2zM17,11h-2v2h2v-2zM19,4h-1L18,2h-2v2L8,4L8,2L6,2v2L5,4c-1.11,0 -1.99,0.9 -1.99,2L3,20c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.9,-2 -2,-2zM19,20L5,20L5,9h14v11z"/>
+</vector>
diff --git a/app/src/main/res/drawable/vector_close.xml b/app/src/main/res/drawable/vector_close.xml
new file mode 100644
index 0000000..fa7591c
--- /dev/null
+++ b/app/src/main/res/drawable/vector_close.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#CCCCCC"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
+</vector>
diff --git a/app/src/main/res/drawable/vector_distance.xml b/app/src/main/res/drawable/vector_distance.xml
new file mode 100644
index 0000000..0ac168a
--- /dev/null
+++ b/app/src/main/res/drawable/vector_distance.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:tint="?attr/colorControlNormal">
+  <path
+      android:fillColor="@android:color/white"
+      android:pathData="M12,10.9c-0.61,0 -1.1,0.49 -1.1,1.1s0.49,1.1 1.1,1.1c0.61,0 1.1,-0.49 1.1,-1.1s-0.49,-1.1 -1.1,-1.1zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM14.19,14.19L6,18l3.81,-8.19L18,6l-3.81,8.19z"/>
+</vector>
diff --git a/app/src/main/res/drawable/vector_list.xml b/app/src/main/res/drawable/vector_list.xml
new file mode 100644
index 0000000..c4c6db1
--- /dev/null
+++ b/app/src/main/res/drawable/vector_list.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M19,3L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM14,17L7,17v-2h7v2zM17,13L7,13v-2h10v2zM17,9L7,9L7,7h10v2z"/>
+</vector>
diff --git a/app/src/main/res/drawable/vector_location.xml b/app/src/main/res/drawable/vector_location.xml
new file mode 100644
index 0000000..1fd7c47
--- /dev/null
+++ b/app/src/main/res/drawable/vector_location.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,2C8.14,2 5,5.14 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.86 -3.14,-7 -7,-7zM16,10h-3v3h-2v-3L8,10L8,8h3L11,5h2v3h3v2z"/>
+</vector>
diff --git a/app/src/main/res/drawable/vector_location_clock.xml b/app/src/main/res/drawable/vector_location_clock.xml
new file mode 100644
index 0000000..99cf00b
--- /dev/null
+++ b/app/src/main/res/drawable/vector_location_clock.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#606060"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
+</vector>
diff --git a/app/src/main/res/drawable/vector_loop.xml b/app/src/main/res/drawable/vector_loop.xml
new file mode 100644
index 0000000..f16a1b0
--- /dev/null
+++ b/app/src/main/res/drawable/vector_loop.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,4L12,1L8,5l4,4L12,6c3.31,0 6,2.69 6,6 0,1.01 -0.25,1.97 -0.7,2.8l1.46,1.46C19.54,15.03 20,13.57 20,12c0,-4.42 -3.58,-8 -8,-8zM12,18c-3.31,0 -6,-2.69 -6,-6 0,-1.01 0.25,-1.97 0.7,-2.8L5.24,7.74C4.46,8.97 4,10.43 4,12c0,4.42 3.58,8 8,8v3l4,-4 -4,-4v3z"/>
+</vector>
diff --git a/app/src/main/res/drawable/vector_photo_camera.xml b/app/src/main/res/drawable/vector_photo_camera.xml
new file mode 100644
index 0000000..c5a1c4c
--- /dev/null
+++ b/app/src/main/res/drawable/vector_photo_camera.xml
@@ -0,0 +1,6 @@
+<vector android:height="10dp" android:tint="#D4D4D6"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="10dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0"/>
+    <path android:fillColor="@android:color/white" android:pathData="M9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2L9,2zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/>
+</vector>
diff --git a/app/src/main/res/drawable/vector_timer.xml b/app/src/main/res/drawable/vector_timer.xml
new file mode 100644
index 0000000..1897572
--- /dev/null
+++ b/app/src/main/res/drawable/vector_timer.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:tint="?attr/colorControlNormal">
+  <path
+      android:fillColor="@android:color/white"
+      android:pathData="M15,1L9,1v2h6L15,1zM11,14h2L13,8h-2v6zM19.03,7.39l1.42,-1.42c-0.43,-0.51 -0.9,-0.99 -1.41,-1.41l-1.42,1.42C16.07,4.74 14.12,4 12,4c-4.97,0 -9,4.03 -9,9s4.02,9 9,9 9,-4.03 9,-9c0,-2.12 -0.74,-4.07 -1.97,-5.61zM12,20c-3.87,0 -7,-3.13 -7,-7s3.13,-7 7,-7 7,3.13 7,7 -3.13,7 -7,7z"/>
+</vector>
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 4f2f815..0bbf29c 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout 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"
@@ -12,35 +11,128 @@
         android:id="@+id/viewPager"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_above="@id/tabLayout" />
+        android:layout_above="@id/bottom_navigation" />
 
 
-    <com.google.android.material.tabs.TabLayout
-        android:id="@+id/tabLayout"
+    <LinearLayout
+        android:id="@+id/bottom_navigation"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:layout_height="70dp"
         android:layout_alignParentBottom="true"
-        android:background="?attr/colorPrimary"
-        app:tabGravity="fill"
-        app:tabIndicatorColor="#FFC107"
-        app:tabMode="fixed"
-        app:tabSelectedTextColor="#FFC107"
-        app:tabTextColor="#000000">
+        android:layout_marginTop="-20dp"
+        android:background="#00ffffff"
+        android:gravity="bottom"
+        android:orientation="horizontal">
 
-<!--        <com.google.android.material.tabs.TabItem-->
-<!--            android:layout_width="match_parent"-->
-<!--            android:layout_height="match_parent"-->
-<!--            android:text="棣栭〉" />-->
+        <LinearLayout
+            android:id="@+id/orderLL"
+            android:layout_width="0dp"
+            android:layout_height="50dp"
+            android:layout_weight="1"
+            android:background="@color/bottom_color"
+            android:gravity="center"
+            android:orientation="vertical">
 
-<!--        <com.google.android.material.tabs.TabItem-->
-<!--            android:layout_width="match_parent"-->
-<!--            android:layout_height="match_parent"-->
-<!--            android:text="鍦板浘" />-->
+            <ImageView
+                android:id="@+id/orderImg"
+                android:layout_width="wrap_content"
+                android:layout_height="25dp"
+                android:layout_marginTop="8dp"
+                android:src="@drawable/bottom_order_black" />
 
-<!--        <com.google.android.material.tabs.TabItem-->
-<!--            android:layout_width="match_parent"-->
-<!--            android:layout_height="match_parent"-->
-<!--            android:text="鎴戠殑" />-->
-    </com.google.android.material.tabs.TabLayout>
+            <TextView
+                android:id="@+id/orderText"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="3dp"
+                android:text="宸ュ崟"
+                android:textSize="12sp" />
+
+        </LinearLayout>
+
+        <FrameLayout
+            android:id="@+id/mapLL"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="bottom"
+            android:orientation="vertical">
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="50dp"
+                android:layout_gravity="bottom"
+                android:background="@color/bottom_color"
+                android:orientation="vertical" />
+
+            <LinearLayout
+                android:layout_width="80dp"
+                android:layout_height="70dp"
+                android:layout_gravity="center"
+                android:background="@drawable/bottom_circle_bg"
+                android:gravity="center"
+                android:orientation="vertical">
+
+                <ImageView
+                    android:id="@+id/mapImg"
+                    android:layout_width="40dp"
+                    android:layout_height="40dp"
+                    android:layout_marginTop="8dp"
+                    android:src="@drawable/bottom_map_white" />
+
+                <TextView
+                    android:id="@+id/mapText"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鍦板浘"
+                    android:textColor="@color/white"
+                    android:textSize="15sp" />
+
+            </LinearLayout>
+
+        </FrameLayout>
+
+        <LinearLayout
+            android:id="@+id/myLL"
+            android:layout_width="0dp"
+            android:layout_height="50dp"
+            android:layout_weight="1"
+            android:background="@color/bottom_color"
+            android:gravity="center"
+            android:orientation="vertical">
+
+            <ImageView
+                android:id="@+id/myImg"
+                android:layout_width="wrap_content"
+                android:layout_height="25dp"
+                android:layout_marginTop="8dp"
+                android:src="@drawable/bottom_my_black" />
+
+            <TextView
+                android:id="@+id/myText"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="3dp"
+                android:text="鎴戠殑"
+                android:textSize="12sp" />
+
+        </LinearLayout>
+
+    </LinearLayout>
+
+
+    <!--    &lt;!&ndash; BottomNavigationView 鐢ㄤ簬搴曢儴瀵艰埅 &ndash;&gt;-->
+    <!--    <com.google.android.material.bottomnavigation.BottomNavigationView-->
+    <!--        android:id="@+id/bottom_navigation"-->
+    <!--        android:layout_width="match_parent"-->
+    <!--        android:layout_height="wrap_content"-->
+    <!--        android:layout_alignParentBottom="true"-->
+    <!--        android:background="@color/bottom_color"-->
+    <!--        app:menu="@menu/main_bottom_nav_menu"-->
+    <!--        app:itemIconTint="@color/bottom_selector_nav_item"-->
+    <!--        app:itemTextColor="@color/bottom_selector_nav_item"-->
+
+    <!--        />-->
+
 
 </RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_map.xml b/app/src/main/res/layout/fragment_map.xml
index 5e3491b..6bb6bf0 100644
--- a/app/src/main/res/layout/fragment_map.xml
+++ b/app/src/main/res/layout/fragment_map.xml
@@ -3,11 +3,14 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <com.github.lzyzsd.jsbridge.BridgeWebView
-        android:id="@+id/webView"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
+<!--    <com.github.lzyzsd.jsbridge.BridgeWebView-->
+<!--        android:id="@+id/webView"-->
+<!--        android:layout_width="match_parent"-->
+<!--        android:layout_height="match_parent" />-->
+        <WebView
+            android:id="@+id/webView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
 
     <TextView
         android:id="@+id/flyBtn"
diff --git a/app/src/main/res/layout/top_title.xml b/app/src/main/res/layout/top_title.xml
index 249aca8..f242220 100644
--- a/app/src/main/res/layout/top_title.xml
+++ b/app/src/main/res/layout/top_title.xml
@@ -27,7 +27,6 @@
             android:id="@+id/tv_title_middle"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-
             android:layout_centerInParent="true"
             android:textColor="@color/white"
             android:textSize="@dimen/title_center_text_size" />
diff --git a/app/src/main/res/menu/main_bottom_nav_menu.xml b/app/src/main/res/menu/main_bottom_nav_menu.xml
new file mode 100644
index 0000000..6010c0c
--- /dev/null
+++ b/app/src/main/res/menu/main_bottom_nav_menu.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item
+        android:id="@+id/navigation_order"
+       android:icon="@drawable/bottom_order_black"
+        android:title="宸ュ崟"/>
+
+    <item
+        android:id="@+id/navigation_map"
+        android:icon="@drawable/bottom_map_black"
+        android:title="鍦板浘"/>
+
+    <item
+        android:id="@+id/navigation_profile"
+        android:icon="@drawable/bottom_my_black"
+        android:title="鎴戠殑"/>
+</menu>
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 94b9732..06e2d6c 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -8,4 +8,7 @@
     <color name="title_color">#1890FF</color>
     <color name="bg_color">#F5F5F5</color>
     <color name="grey">#757575</color>
+    <color name="colorSelected">#ffffff</color>
+    <color name="colorUnselected">#000000</color>
+    <color name="bottom_color">#1890FF</color>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 5fe6e86..fbc6431 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -6,4 +6,5 @@
     <dimen name="my_item_text_size">17sp</dimen>
     <dimen name="common_btn_text_size">20sp</dimen>
     <dimen name="title_height">45dp</dimen>
+    <dimen name="title_center_text_size">18sp</dimen>
 </resources>
\ No newline at end of file

--
Gitblit v1.8.0