zoukankan      html  css  js  c++  java
  • 【“零起点”百度地图手机SDK】如何添加地图图层+按钮事件+水平垂直布局?

    摘要:我们在这一章将学习到如何通过按钮事件来控制地图图层(交通流量图,卫星图)的显示,以及如何对android应用进行水平和垂直布局。

    ----------------------------------------------------------------------

    系列阅读:

    1、【百度地图-安卓SDK】从头开始写android程序
    http://www.cnblogs.com/milkmap/archive/2011/11/25/2263475.html 

    2、【“零起点”--百度地图手机SDK】如何创建一张地图
    http://www.cnblogs.com/milkmap/archive/2012/05/11/2496526.html

    3、【“零起点”--百度地图手机SDK】如何使用离线地图?

    http://www.cnblogs.com/milkmap/archive/2012/05/21/2511928.html

    -----------------------------------------------------------------------

    一、水平和垂直布局

    1、决定效果

    我们要添加两个图层按钮,和一个地图视图。

    将按钮群和地图垂直布局,按钮群内部的两个按钮水平布局,如下图:

    2、找到并打开布局的xml文件

    在工程目录-》res-》layout-》main.xml

    3、然后,进行总体的布局。

    最外部的layout是vertical垂直的。

    按钮群是horizontal水平排布的。

    最后一个地图视图横竖都无所谓,因为它要占满整个布局。

    <LinearLayout android:orientation="vertical">
    
        <LinearLayout android:orientation="horizontal">
            <Button/>
            <Button/>
        </LinearLayout>
    
        <LinearLayout android:orientation="horizontal">
            <com.baidu.mapapi.MapView />
        </LinearLayout>
    
    </LinearLayout>

    4、main.xml文件的全部源代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
           <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="100px"
        android:orientation="horizontal" >
            <!-- 图层按钮 -->
            <Button
                android:id="@+id/satelliteBTN"
                android:layout_width="150px"
                android:layout_height="100px"
                android:layout_weight="1"
                android:text="卫星图" />
            <Button
                android:id="@+id/trafficBTN"
                android:layout_width="150px"
                android:layout_height="100px"
                android:layout_weight="1"
                android:text="交通流量" />    
        </LinearLayout>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
            <!-- 地图控件 -->
            <com.baidu.mapapi.MapView
                android:id="@+id/bmapsView"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:clickable="true" >
            </com.baidu.mapapi.MapView>
        </LinearLayout>
    </LinearLayout>

    二、地图图层

    根据官网的开发指南,大家可以很容易地在开发指南里找到关于图层的代码。

    mMapView.setSatellite(true); //卫星图
    mMapView.setTraffic(true); //交通流量

    哈哈,实在是太简单了!

    直接添加这两句话,可以让交通流量和卫星图的图层直接显示出来。

    下面我们来添加按钮的事件,使得点击按钮后,出现卫星图,或是交通流量图。

    三、按钮事件

    以卫星图为例,我们来为按钮添加事件。

    1、在布局xml文件中指定按钮的id。

    xml文件的位置在本文开头已经说过了。

    <Button
    android:id="@+id/satelliteBTN"
    android:layout_width="150px"
    android:layout_height="100px"
    android:layout_weight="1"
    android:text="卫星图" />

    2、找到主java文件

    工程名-》src-》com.baidu.searchpoi-》SearchPOIActivity.java

    3、申明变量

    在activity里面内先写申明

    Button satelliteBtn = null; //卫星图按钮

    4、添加按钮事件

    在oncreate函数里写按钮事件

    /** 卫星图按钮 **/
            satelliteBtn = (Button)findViewById(R.id.satelliteBTN);  //指定按钮的id
            OnClickListener clickListener = new OnClickListener(){
                public void onClick(View v) {
                    mMapView.setSatellite(true); //卫星图
                }
            };
            satelliteBtn.setOnClickListener(clickListener);

    5、效果

    ok 运行一下。点击卫星图按钮后,卫星图就展示出来了。

    6、交通流量图

    同理,可以制作出交通流量图。注意变量名称不要重复,ID不要重复,事件的名称也不要重复。

    交通流量的效果图如下:

    7、java文件全部源代码

    package com.baidu.searchpoi;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    /** 引入类 **/
    import java.util.ArrayList;
    import java.util.List;
     
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.graphics.Point;
    import android.graphics.drawable.Drawable;
    import android.location.Location;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
     
    import com.baidu.mapapi.BMapManager;
    import com.baidu.mapapi.GeoPoint;
    import com.baidu.mapapi.ItemizedOverlay;
    import com.baidu.mapapi.LocationListener;
    import com.baidu.mapapi.MKAddrInfo;
    import com.baidu.mapapi.MKDrivingRouteResult;
    import com.baidu.mapapi.MKGeneralListener;
    import com.baidu.mapapi.MKLocationManager;
    import com.baidu.mapapi.MKOLUpdateElement;
    import com.baidu.mapapi.MKOfflineMap;
    import com.baidu.mapapi.MKOfflineMapListener;
    import com.baidu.mapapi.MKPlanNode;
    import com.baidu.mapapi.MKPoiResult;
    import com.baidu.mapapi.MKSearch;
    import com.baidu.mapapi.MKSearchListener;
    import com.baidu.mapapi.MKTransitRouteResult;
    import com.baidu.mapapi.MKWalkingRouteResult;
    import com.baidu.mapapi.MapActivity;
    import com.baidu.mapapi.MapController;
    import com.baidu.mapapi.MapView;
    import com.baidu.mapapi.MyLocationOverlay;
    import com.baidu.mapapi.Overlay;
    import com.baidu.mapapi.OverlayItem;
    import com.baidu.mapapi.PoiOverlay;
    import com.baidu.mapapi.RouteOverlay;
    import com.baidu.mapapi.TransitOverlay;
    
    /** activity **/
    public class SearchPOIActivity extends MapActivity {
        //申明变量
        BMapManager mBMapMan = null;  
        MapView mMapView = null; 
        MKOfflineMap mOffline = null;   //离线地图变量
        Button satelliteBtn = null; //卫星图按钮
        Button trafficBtn = null;   //交通流量按钮
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            mBMapMan = new BMapManager(getApplication());
            mBMapMan.init("4AA2949E616E069C37CDC3152E8C401A05A0035D", null);
            super.initMapActivity(mBMapMan);
             
            mMapView = (MapView) findViewById(R.id.bmapsView);
            mMapView.setBuiltInZoomControls(true);  //设置启用内置的缩放控件
             
            MapController mMapController = mMapView.getController();  // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
            GeoPoint point = new GeoPoint((int) (39.93 * 1E6),
                    (int) (116.42 * 1E6));  //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
            mMapController.setCenter(point);  //设置地图中心点
            mMapController.setZoom(13);    //设置地图zoom级别
            
            /** 离线地图初始化  **/
            mOffline = new MKOfflineMap();
            mOffline.init(mBMapMan, new MKOfflineMapListener() {
                public void onGetOfflineMapState(int type, int state) {
                    switch (type) {
                    case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:
                        {
                            MKOLUpdateElement update = mOffline.getUpdateInfo(state);
                            //mText.setText(String.format("%s : %d%%", update.cityName, update.ratio));
                        }
                        break;
                    case MKOfflineMap.TYPE_NEW_OFFLINE:
                        Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));
                        break;
                    case MKOfflineMap.TYPE_VER_UPDATE:
                        Log.d("OfflineDemo", String.format("new offlinemap ver"));
                        break;
                    }    
                      }
            }
            );
            /** 离线地图导入离线包 **/
            int num = mOffline.scan();
            //if (num != 0)   mText.setText(String.format("已安装%d个离线包", num));
            
            /** 卫星图按钮 **/
            satelliteBtn = (Button)findViewById(R.id.satelliteBTN);  //指定按钮的id
            OnClickListener clickListener = new OnClickListener(){
                public void onClick(View v) {
                    mMapView.setSatellite(true); //卫星图
                }
            };
            satelliteBtn.setOnClickListener(clickListener);
            
            /** 交通流量按钮 **/
            trafficBtn = (Button)findViewById(R.id.trafficBTN);  //指定按钮的id
            OnClickListener clickListener2 = new OnClickListener(){
                public void onClick(View v) {
                    mMapView.setTraffic(true); //交通流量
                }
            };
            trafficBtn.setOnClickListener(clickListener2);
        }
     
        @Override
        protected boolean isRouteDisplayed() {
            return false;
        }
        
        @Override
        protected void onDestroy() {
            if (mBMapMan != null) {
                mBMapMan.destroy();
                mBMapMan = null;
            }
            super.onDestroy();
        }
        
        @Override
        protected void onPause() {
            if (mBMapMan != null) {
                mBMapMan.stop();
            }
            super.onPause();
        }
        
        @Override
        protected void onResume() {
            if (mBMapMan != null) {
                mBMapMan.start();
            }
            super.onResume();
        }

    }

    注意,以上代码保留了上一章中讲述的“离线地图”。

  • 相关阅读:
    配置VRRP主备功能
    网络拓扑实例02:MSTP功能
    网络拓扑实例01:RSTP功能
    配置PoE交换机功能
    交换机基于接口划分VLAN(汇聚层设备作为网关)
    交换机基于接口划分VLAN(接入层设备作为网关)
    配置交换机Trunk接口流量本地优先转发(集群/堆叠)
    配置交换机之间直连链路聚合-LACP模式
    配置交换机之间直连链路聚合-手工模式
    配置交换机接口二三层切换
  • 原文地址:https://www.cnblogs.com/milkmap/p/2518454.html
Copyright © 2011-2022 走看看