安卓:百度地图开发(超详细)

一、百度地图介绍

        百度地图SDK是一套供开发者使用的软件开发工具包(SDK),用于在Android应用程序中集成和使用百度地图功能。通过使用百度地图SDK,开发者可以实现在自己的应用中显示地图、获取定位信息、进行搜索、导航等功能。

        百度地图SDK提供了许多常用的类和方法,用于实现各种地图相关功能。以下是一些常用的类及其方法:

1. MapView类:

        MapView 类是百度地图SDK提供的一个控件类,用于在应用程序的界面上显示地图。它是一个自定义的 View,可以与 BaiduMap 类关联,实现地图的显示和交互功能。 

  常用方法: 

  •    getMap():获取百度地图对象(BaiduMap)的实例。
  •    onResume():在Activity的生命周期方法中调用,用于恢复地图控件的绘制和定位功能。
  •    onPause():在Activity的生命周期方法中调用,用于暂停地图控件的绘制和定位功能。
  •    onDestroy():在Activity的生命周期方法中调用,用于销毁地图控件。

2. BaiduMap类:

        BaiduMap 类是百度地图SDK中的核心类,用于管理和操作地图。它提供了一系列方法和接口,用于显示地图、控制地图状态、添加覆盖物、定位等功能。 

常用方法:  

  •    setMapType():设置地图显示类型,如普通地图、卫星地图等。
  •    setMapStatus():设置地图的状态,包括中心点坐标、缩放级别、倾斜角度和旋转角度等。
  •    addOverlay():添加覆盖物(Overlay),如标记点(Marker)、折线(Polyline)和多边形(Polygon)等。
  •    clear():清除地图上的所有覆盖物。
  •    setOnMapClickListener():设置地图点击事件监听器。
  •    setOnMarkerClickListener():设置标记点点击事件监听器。

3. GeoCoder类:

        GeoCoder 类是百度地图SDK提供的一个地理编码和反地理编码工具类,用于将地址信息与地理坐标之间进行转换。通过 GeoCoder 类,开发者可以实现将地址解析为经纬度坐标(地理编码),或者将经纬度坐标解析为地址信息(反地理编码)。 

常用方法:  

  •    newInstance():创建 GeoCoder 实例。
  •    setOnGetGeoCodeResultListener():设置地理编码查询结果监听器。
  •    setOnGetReverseGeoCodeResultListener():设置反地理编码查询结果监听器。
  •    geocode():发起地理编码查询,将地址信息转换为经纬度坐标。
  •    reverseGeoCode():发起反地理编码查询,将经纬度坐标转换为地址信息。

4. LocationClient类:

         LocationClient 类是百度定位SDK提供的核心类,用于实现设备的定位功能。通过 LocationClient 类,开发者可以获取设备的当前位置信息,包括经纬度坐标、速度、方向等。

常用方法:  

  •    registerLocationListener():注册定位监听器。
  •    start():开始定位。
  •    stop():停止定位。

5. RoutePlanSearch类:

        RoutePlanSearch 类是百度地图SDK提供的路线规划搜索类,用于实现不同交通方式的路线规划功能。通过 RoutePlanSearch 类,开发者可以根据起点和终点的坐标,进行驾车、步行、公交等多种交通方式的路线规划,并获取详细的路线信息。

常用方法:  

  •    setOnGetRoutePlanResultListener():设置路径规划结果监听器。
  •    drivingSearch():发起驾车路线规划。
  •    walkingSearch():发起步行路线规划。
  •    transitSearch():发起公交路线规划。

6.LatLng 类:

        LatLng 类是百度地图SDK提供的一个表示经纬度坐标的类。它用于存储地理位置的经度和纬度信息,并提供了一些方法来获取和设置经纬度值。 

常用方法:  

  • latitude()获取纬度值。
  • longitude()获取经度值。
  • equals(LatLng other)判断当前 LatLng 对象是否与另一个 LatLng 对象相等。
  • toString()返回 LatLng 对象的字符串表示。 

7. PoiSearch 类: 

        PoiSearch 类是百度地图SDK提供的一个兴趣点搜索类,用于实现地图上的兴趣点检索功能。通过 PoiSearch 类,开发者可以根据关键词、地理位置等条件进行兴趣点的搜索,并获取相关的搜索结果。

常用方法:  

  •  newInstance()创建 PoiSearch 实例。
  • searchInCity(PoiCitySearchOption option)在指定城市内搜索兴趣点。需要创建一个 PoiCitySearchOption 对象,并设置要搜索的城市名称、关键词等参数,然后调用该方法进行搜索。
  • searchNearby(PoiNearbySearchOption option)在指定位置附近搜索兴趣点。需要创建一个 PoiNearbySearchOption 对象,并设置中心点坐标、搜索半径、关键词等参数,然后调用该方法进行搜索。
  • searchInBound(PoiBoundSearchOption option)在指定矩形区域内搜索兴趣点。需要创建一个 PoiBoundSearchOption 对象,并设置矩形区域的左下角和右上角坐标、关键词等参数,然后调用该方法进行搜索。
  • setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener listener)设置兴趣点搜索结果的监听器。需要实现 OnGetPoiSearchResultListener 接口,并将其注册给 PoiSearch 对象,以接收搜索结果的回调。
  • searchPoiDetail(PoiDetailSearchOption option)根据兴趣点的 UID 获取详细信息。需要创建一个 PoiDetailSearchOption 对象,并设置兴趣点的 UID,然后调用该方法进行详情查询。
  • searchPoiIndoor(PoiIndoorOption option)在室内地图中搜索兴趣点。需要创建一个 PoiIndoorOption 对象,并设置室内ID、关键词等参数,然后调用该方法进行搜索。
  • searchPoiPage(int pageNum)加载下一页的搜索结果。需要指定要加载的页码,通过设置之前的搜索选项对象的 pageNum 属性来实现分页加载。
  • destroy()销毁 PoiSearch 对象,释放相关资源。

8.PoiResult 类:

        PoiResult 类是百度地图SDK中的一个类,用于表示兴趣点搜索的结果集。它包含了符合搜索条件的一组兴趣点数据,并提供了相关的方法来获取和操作这些数据。

  • getAllPoi():获取搜索到的所有结果。
  • error:表示搜索结果的错误码。 

9.PoiInfo 类:

        PoiInfo 类是百度地图SDK中的一个类,用于表示兴趣点的信息。它包含了兴趣点的名称、地址、经纬度坐标等详细信息,并提供了相关的方法来获取和操作这些数据。 

  • name:POI 名称。
  • address:POI 地址。

10.PoiOverlay 类:

        PoiOverlay 类是百度地图SDK中的一个类,用于在地图上绘制兴趣点标注覆盖物。它可以将 PoiResult 中的兴趣点数据在地图上展示,并提供了一些方法用于自定义标注样式和点击事件处理。

  • setData():设置搜索到的 POI 数据。
  • addToMap():将兴趣点标注添加到地图上。
  • zoomToSpan():缩放地图以适应所有兴趣点。

二、使用例子

例1:获取当前位置:

 MainActivity :

package com.example.location;



import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;

import android.widget.TextView;
import android.widget.Toast;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.model.LatLng;

import com.baidu.mapapi.search.geocode.GeoCoder;

import com.baidu.mapapi.search.poi.PoiSearch;


public class MainActivity extends AppCompatActivity {
    LocationClient mLocationClient;
    MapView mMapView;
    BaiduMap mBaiduMap;
    boolean isFirstLocate = true;
    
    PoiSearch mPoiSearch;
    TextView tv_Lat; // 经度
    TextView tv_Lon; // 纬度
    TextView tv_Add; // 地址
    GeoCoder mGeoCoder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 初始化地图应用
        SDKInitializer.setAgreePrivacy(this.getApplicationContext(), true);
        LocationClient.setAgreePrivacy(true);
        // 初始化百度地图SDK。这个方法必须在使用百度地图相关功能之前调用,否则无法正常使用地图功能。
        SDKInitializer.initialize(this.getApplicationContext());
        setContentView(R.layout.activity_main);
        mMapView = findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();
        tv_Lat = findViewById(R.id.tv_Lat);
        tv_Lon = findViewById(R.id.tv_Lon);
        tv_Add = findViewById(R.id.tv_Add);
//        search = findViewById(R.id.search);

//        // 初始化 PoiSearch 和 GeoCoder 对象
//        mPoiSearch = PoiSearch.newInstance();
//        mGeoCoder = GeoCoder.newInstance();

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
        } else {
            requestLocation();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(this, "没有定位权限!", Toast.LENGTH_SHORT).show();
                    finish();
                } else {
                    requestLocation();
                }
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    private void requestLocation() {
        // 定位前初始化
        initLocation();
        // 发起定位
        mLocationClient.start();
    }

    private void initLocation() {
        try {
            mLocationClient = new LocationClient(getApplicationContext());
            mLocationClient.registerLocationListener(new MyLocationListener());

            // 定位客户端操作
            LocationClientOption option = new LocationClientOption();
            // 设置扫描时间
            option.setScanSpan(1000);
            // 设置定位模式
            option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
            option.setIsNeedAddress(true); // 设置需要地址信息
            // 保存定位参数
            mLocationClient.setLocOption(option);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 内部类,百度位置监听器
    private class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            tv_Lat.setText(String.valueOf(bdLocation.getLatitude()));
            tv_Lon.setText(String.valueOf(bdLocation.getLongitude()));
            tv_Add.setText(bdLocation.getAddrStr());
            // GPS 定位或网格定位时
            if (bdLocation.getLocType() == BDLocation.TypeGpsLocation || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {
                navigateTo(bdLocation);
            }
        }

        private void navigateTo(BDLocation bdLocation) {
            if (isFirstLocate) {
                LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
                MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
                // 以动画更新方式,实现对手势引起的地图状态的更新
                mBaiduMap.animateMapStatus(update);
                // 创建自定义标记
                BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.arrow_icon);
                MarkerOptions markerOptions = new MarkerOptions().position(ll).icon(bitmap).anchor(0.5f, 0.5f);
                mBaiduMap.addOverlay(markerOptions);

                isFirstLocate = false;
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
        // 释放 PoiSearch 和 GeoCoder 对象
//        mPoiSearch.destroy();
//        mGeoCoder.destroy();
    }

    
}

 activity_main:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    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"
    tools:context=".MainActivity">

<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="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="#E0474141"
        >
        
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginLeft="12dp"
        android:layout_marginTop="20dp"
        android:orientation="horizontal"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="纬度:"
            android:textColor="#ffffff"
            android:textSize="15dp"
            />
        <TextView
            android:id="@+id/tv_Lat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textColor="#ffffff"
            android:textSize="15sp"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginLeft="12dp"
        android:layout_marginTop="10dp"
        android:orientation="horizontal"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="经度:"
            android:textColor="#ffffff"
            android:textSize="15dp"
            />
        <TextView
            android:id="@+id/tv_Lon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textColor="#ffffff"
            android:textSize="15sp"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginLeft="12dp"
        android:layout_marginTop="10dp"
        android:orientation="horizontal"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="地址:"
            android:textColor="#ffffff"
            android:textSize="15dp"
            />
        <TextView
            android:id="@+id/tv_Add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textColor="#ffffff"
            android:textSize="15sp"
            />
    </LinearLayout>
    </LinearLayout>
</FrameLayout>

 AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.location">
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.UI"

        >
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="你的Key" />
        <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>
        <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
        </service>
    </application>

</manifest>

 运行结果:

 未完待续。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/49260.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

办公软件巨头CCED、WPS迎来新挑战,新款办公软件已形成普及之势

办公软件巨头CCED、WPS的成长经历 众所周知&#xff0c;CCED和WPS是中国办公软件行业的两大知名品牌。 但它们的成长经历不是一蹴而就的&#xff0c;都是经历了漫长的发展过程的。 CCED是中国大陆早期的一款文本编辑器&#xff0c;它在上个世纪80年代末和90年代初非常流行。 …

数学建模-MATLAB三维作图

导出图片用无压缩tif会更清晰 帮助文档&#xff1a;doc 函数名 matlab代码导出为PDF 新建实时脚本或右键文件转换为实时脚本实时编辑器-全部运行-内嵌显示保存为PDF

githack的安装步骤+一次错误体验

一.githack的安装步骤 1.要在Kali Linux上安装GitHack工具&#xff0c;您可以按照以下步骤操作&#xff1a; 打开终端并使用以下命令克隆GitHack存储库&#xff1a; git clone https://github.com/lijiejie/GitHack.git2.进入GitHack目录&#xff1a; cd GitHack3.安装依赖项…

Linux下安装RabbitMQ教程

官方安装指南&#xff1a;https://www.rabbitmq.com/install-rpm.html 我们将要安装的RabbitMQ的版本是3.8.2 el/7/rabbitmq-server-3.8.2-1.el7.noarch.rpm - rabbitmq/rabbitmq-server packagecloud 不需要单独安装Erlang环境。 2. 环境配置&#xff1a; 前提&#xff…

RabbitMQ 教程 | RabbitMQ 入门

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

自动驾驶之轨迹规划8——Apollo参考线和轨迹

1. abstract 本文主要讲解routing和planning模块中的reference line&#xff0c;我之前一直搞不明白这个reference line是如何生成的&#xff0c;有什么作用&#xff0c;和routing以及planning的关系。现在有了一些心得打算梳理一下&#xff1a; 决策规划模块负责生成车辆的行…

6、Kubernetes核心技术 - Pod

目录 一、概述 二、Pod机制 2.1、共享网络 2.2、共享存储 三、Pod资源清单 四、 Pod 的分类 五、Pod阶段 六、Pod 镜像拉取策略 ImagePullBackOff 七、Pod 资源限制 八、容器重启策略 一、概述 Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。P…

flutter:animate_do(flutter中的Animate.css)

简介 做过web开发的应该大部分人都知道Animate.css&#xff0c;它为开发者提供了一系列预定义的动画效果&#xff0c;可以通过简单的CSS类来实现各种动画效果。而animate_do 相当于flutter中的Animate.css,它提供了很多定义好的动画效果 基本使用 官方地址 https://pub-web.…

【C++】-多态的经典题目

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

单机环境下定时任务的基本原理和常见解决方案(二)之时间轮原理分析

单机环境下定时任务的基本原理和常见解决方案之时间轮原理分析 时间轮Netty时间轮使用Netty 时间轮 HashedWheelTimer 源码分析向时间轮里添加taskWorkerThread线程执行时间轮任务 多层时间轮总结 时间轮 生活中的时钟想必大家都不陌生&#xff0c;而时间轮的设计思想就是来源…

智能家居是否可与ChatGPT深度融合?

​ ChatGPT自2022年面世以来&#xff0c;已为亿万网民提供智能问答服务。然而我们是否曾想到&#xff0c;这一人工智能驱动的聊天机器人&#xff0c;是否可为智能家居赋能? 要实现ChatGPT与智能家居设备之间的无缝对话&#xff0c;单单依靠一台终端是远远不够的。ChatGPT必须…

【快应用】通用方法getBoundingClientRect的使用

【关键词】 快应用开发、通用方法、getBoundingClientRect 【背景】 快应用通用方法中提供了getBoundingClientRect方法来获取当前组件的布局位置&#xff0c;之前处理的快应用问题中&#xff0c;有个cp却把这种场景误解为可以获取到文字的宽度和高度&#xff0c;这是不合理的…

会议OA项目之会议发布(一)

目录 前言&#xff1a; 会议发布的产品原型图&#xff1a; 1.会议发布 1.1实现的特色功能&#xff1a; 1.2思路&#xff1a; 使用的数据库&#xff1a; 我们要实现多功能下拉框的形式选择可以参考原文档&#xff1a;https://hnzzmsf.github.io/example/example_v4.html#down…

Java-方法的使用

目录 一、方法的概念和使用 1.1方法的含义 1.2 方法的定义 1.3方法调用的执行过程 1.4实参和形参的关系 1.5没有返回值的方法 二、方法重载 2.1方法重载的含义 2.3 方法签名 三、递归 3.1 递归的概念 3.2递归的执行过程 3.3递归练习 一、方法的概念和使用 1.1方法的含义 方…

无符号数和有符号数的“bug”

1. 起因 在实现kmp算法时&#xff0c;出现了诡异的现象&#xff0c;看下面的代码&#xff1a; int KMP (const char *s, const char *t) {int lenS strlen (s);int lenT strlen (t);int next[lenT];get_next (next, t);int i 0;int j 0;while (i < lenS && j …

watch避坑,使用computed进行处理数据

业务场景&#xff1a;在vue中监听el-input 中的字数有没有超过60&#xff0c;如果超过60字时将60后面的字变为 “>>” 符号&#xff0c;以此实现预览苹果手机推送摘要场景。 错误&#xff1a;开始的逻辑是使用watch监听&#xff0c;检查length超过60直接 加上符号&#x…

深度学习:Pytorch最全面学习率调整策略lr_scheduler

深度学习&#xff1a;Pytorch最全面学习率调整策略lr_scheduler lr_scheduler.LambdaLRlr_scheduler.MultiplicativeLRlr_scheduler.StepLRlr_scheduler.MultiStepLRlr_scheduler.ConstantLRlr_scheduler.LinearLRlr_scheduler.ExponentialLRlr_scheduler.PolynomialLRlr_sched…

【六大锁策略-各种锁的对比-Java中的Synchronized锁和ReentrantLock锁的特点分析-以及加锁的合适时机】

系列文章目录 文章目录 系列文章目录前言一、六大"有锁策略"1. 乐观锁——悲观锁2. 轻量级锁——重量级锁3. 自旋锁——挂起等待锁4. 互斥锁——读写锁5. 可重入锁——不可重入锁6. 公平锁——非公平锁 二、Synchronized——ReentrantLockSynchronized的特点&#xf…

【C语言数据结构】模拟·顺序表·总项目实现

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

leetcode 376. 摆动序列

2023.7.28 本题思路是定义一个 direct变量记录上一次摆动是上坡还是下坡 。 然后在一个for循环中循环判断当前摆动和上一次摆动是否一致&#xff0c;如果不一致则视为一次摆动。 如果前后元素值相等得话&#xff0c;直接continue进入下一次循环。 下面看代码&#xff1a; clas…