Android之百度地图(二)

Android之百度地图(二)
不是很明白allowBackup的方法 查询一下
Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值[1] ,其属性值默认是true。当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。
本文来自 iRuoBin 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_31387043/article/details/51452782?utm_source=copy
Android之百度地图(二)
开发百度地图自然不用多说,需要申请很多的权限!!

Android之百度地图(二)
要完成百度地图的开发自然需要大量的这些百度提供的文件了,不多说
这些文件属于json类型,比xml的文件类型所占用的空间还小,很适合互联网之间信息的传输。
Android之百度地图(二)
以上是百度百科的解释。

接下来谈谈关于Java中使用log而不使用System.out.println(),
快捷键 在方法里面输入logd 然后按下tab键
Android之百度地图(二)
然后在方法外面输入 logt +tab键
Android之百度地图(二)
效果如图所示。。。

public class MainActivity extends Activity
{
    private MapView mMapView = null;
    private BaiduMap mBaiduMap;
    private BitmapDescriptor bitMapN = null;
    private int num_Index=1;//气球计数器
    private int presentIndex = -1;//当前marker索引
    private List<LatLng> LatLnglist = new ArrayList<LatLng>();//坐标集合
    private int yoffset=0;    //偏移量
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        //注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
        //获取地图对象引用
        mBaiduMap = mMapView.getMap();
        //设置地图缩放比
        float mZoomLevel = 16.0f;
        mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(mZoomLevel));
        //加载地图中心点默认为北京*
        mBaiduMap.setMapStatus
        (
            MapStatusUpdateFactory.newLatLng( new LatLng(39.91635753159,116.40385626888427))
        );
        //加载marker图片
        bitMapN = BitmapDescriptorFactory.fromResource(R.drawable.point_n);
        //添加地图单击事件监听
        mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener()
        {
            //点击地图事件回调方法
            @Override
            public void onMapClick(LatLng point)
            {
                SetMaker(point);//添加气球
                LatLnglist.add(point);	//把当前位置信息添加到LatLnglist集合中
            }
           //点击POI(地理兴趣点)事件回调方法
           @Override
            public boolean onMapPoiClick(MapPoi arg0)
            {
                return false;
            }
        });
        //地图marker点击事件监听
        mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener()
        {//添加气球监听
            @Override
            public boolean onMarkerClick(Marker marker)
            {
                presentIndex = Integer.parseInt(marker.getTitle()) - 1;//设置当前marker索引
                ShowWindow(LatLnglist.get(presentIndex));//显示自定义窗口
                mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(LatLnglist
                        .get(presentIndex)));//将地图中心点移到当前marker位置
                return true;
            }
        });
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);//设置地图模式
    }
    public void SetMaker(LatLng point)
    {
        //构建MarkerOption,用于在地图上添加Marker
        OverlayOptions mOverlay = new MarkerOptions()//创建MarkerOptions对象
                .position(point) //设置当前MarkerOptions对象的经纬度
                .icon(bitMapN)//设置当前MarkerOptions对象的自定义图标
                .perspective(true)//设置为近大远小效果
                .title(num_Index+"");//设置Marker 的标题
        mBaiduMap.addOverlay(mOverlay); //在地图上添加Marker,并显示
        num_Index++;//计数器自加
    }
    public void ShowWindow(LatLng point)
    {
        LayoutInflater mInflater = LayoutInflater
                .from(MainActivity.this);//加入窗口布局
        LinearLayout ll = (LinearLayout) mInflater.inflate(
                R.layout.view_map_popup, null);//获取窗口 LinerLayout
        TextView Info = (TextView) ll.findViewById(R.id.popInfo);//获取引用
        Info.setText("经度为:"+point.longitude+""+"\n"+"纬度为:"+point.latitude);


        InfoWindow infoWindow=new InfoWindow(ll,point,yoffset);//初始化通知窗口

        Info.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        mBaiduMap.hideInfoWindow();
                                    }
                                }
        );                                                      //对通知窗口添加监听

        mBaiduMap.showInfoWindow(infoWindow);                   //地图上显示通知窗口

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

    private static final String TAG = "MainActivity";

以上是整个地图的Mainactivity 代码
下面逐步分析

先声明对象 MapView BaiduMap BitmapDescriptor
分别是地图控件 地图引用 比特图描述符
Android之百度地图(二)

这一段不难理解 主要是注意SDK各组件的初始化
Android之百度地图(二)

给比特图描述符加载图片 (气泡)
添加地图单击事件方法
Android之百度地图(二)

SetMaker方法
OverlayOptions 对象的使用方法
以及在地图上添加的气泡的方法 addOverlay 参数为OverlayOptions 对象

public void SetMaker(LatLng point)
    {
        //构建MarkerOption,用于在地图上添加Marker
        OverlayOptions mOverlay = new MarkerOptions()//创建MarkerOptions对象
                .position(point) //设置当前MarkerOptions对象的经纬度
                .icon(bitMapN)//设置当前MarkerOptions对象的自定义图标
                .perspective(true)//设置为近大远小效果
                .title(num_Index+"");//设置Marker 的标题
        mBaiduMap.addOverlay(mOverlay); //在地图上添加Marker,并显示
        num_Index++;//计数器自加
    }

气泡点击的监听
Android之百度地图(二)
自定义窗口 当点击气泡的时候弹出一个自定义的窗口
然后在点击该窗口 窗口隐藏
Android之百度地图(二)