高德Demo,网上找了很多资料都不适合,自己研究出一个Demo,非常适合入门

高德Demo,网上找了很多资料都不适合,自己研究出一个Demo,非常适合入门好炫的高德:

 

Mainfest清单:需要key

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.xmb.test_1"

    android:versionCode="1"

    android:versionName="1.0" >



    <uses-sdk

        android:minSdkVersion="9"

        android:targetSdkVersion="15" />



    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <meta-data

            android:name="com.amap.api.v2.apikey"

            android:value="d707ab913a39a7801a58807f022e6439" />

        <activity

            android:name=".Main2"

            android:label="@string/title_activity_main" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />



                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        

        <activity android:name=".TakePictures"

                   android:screenOrientation="landscape">

            </activity>

    </application>

 <uses-permission 

android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>   

<uses-permission 

android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>

<uses-permission 

android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> 

<uses-permission  

android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

<uses-permission  

android:name="android.permission.INTERNET"></uses-permission>

<uses-permission  

android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

<uses-permission  

android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

<uses-permission  

android:name="android.permission.READ_PHONE_STATE"></uses-permission>

<uses-permission  

android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

<uses-permission  

android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

<uses-permission android:name="android.permission.CAMERA"/>

<!-- 在SDCard中创建与删除文件权限 -->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<!-- 往SDCard写入数据权限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>



</manifest>

main2.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

 <fragment

            android:id="@+id/map1"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_marginRight="5dp"

            android:layout_weight="1"

            class="com.amap.api.maps.SupportMapFragment" />"

</LinearLayout>

Main2.java

  1 package com.xmb.test_1;

  2 

  3 

  4 import com.amap.api.location.AMapLocation;

  5 import com.amap.api.location.AMapLocationListener;

  6 import com.amap.api.location.LocationManagerProxy;

  7 import com.amap.api.location.LocationProviderProxy;

  8 import com.amap.api.maps.AMap;

  9 import com.amap.api.maps.AMap.OnMapClickListener;

 10 import com.amap.api.maps.LocationSource.OnLocationChangedListener;

 11 import com.amap.api.maps.SupportMapFragment;

 12 import com.amap.api.maps.model.BitmapDescriptorFactory;

 13 import com.amap.api.maps.model.LatLng;

 14 import com.amap.api.maps.model.MarkerOptions;

 15 import com.amap.api.search.core.AMapException;

 16 import com.amap.api.search.core.LatLonPoint;

 17 import com.amap.api.search.route.Route;

 18 import com.amap.api.search.route.Route.FromAndTo;

 19 

 20 import android.annotation.SuppressLint;

 21 import android.app.Activity;

 22 import android.location.Criteria;

 23 import android.location.Location;

 24 import android.os.Bundle;

 25 import android.support.v4.app.FragmentActivity;

 26 import android.util.Log;

 27 import android.view.View;

 28 

 29 public class Main2 extends FragmentActivity implements AMapLocationListener{

 30     private AMap mMapView;

 31     private OnLocationChangedListener mListener;

 32     private LocationManagerProxy locationManager = null; //声明LocationManagerProxy

 33     protected void onCreate(Bundle savedInstanceState) {

 34         super.onCreate(savedInstanceState);

 35         setContentView(R.layout.main2);

 36         locationManager = LocationManagerProxy.getInstance(this); //初始化LocationManagerProxy   

 37         mMapView= ((SupportMapFragment) getSupportFragmentManager()

 38                 .findFragmentById(R.id.map1)).getMap();

 39         //mMapView.setMapType(AMap. MAP_TYPE_SATELLITE); //卫星界面

 40         //标记Marker

 41         /*LatLng marker1 = new LatLng(23.173218,113.413142);

 42         mMapView.addMarker(new MarkerOptions().position(marker1).title("Marker1 ")

 43                         .icon(BitmapDescriptorFactory

 44         .fromResource(R.drawable.car_green)).snippet("Marker2")

 45                         .draggable(true));*/

 46         //监听动作

 47         /*mMapView.setOnMapClickListener(new OnMapClickListener(){

 48 

 49             @Override

 50             public void onMapClick(LatLng arg0) {

 51                 // TODO Auto-generated method stub

 52                 mMapView.addMarker(new MarkerOptions().position(arg0).title("Marker1 ")

 53                         .icon(BitmapDescriptorFactory

 54         .fromResource(R.drawable.car_green)).snippet("Marker2")

 55                         .draggable(true));

 56             }

 57             

 58         });*/

 59         //enableMyLocation();

 60         //路线规划(驾车)

 61         LatLonPoint startpoint=new LatLonPoint(23.173218,113.413142);

 62         LatLonPoint endtpoint=new LatLonPoint(23.072222,113.402222);

 63         FromAndTo fromAndTo = new FromAndTo(startpoint, endtpoint); 

 64         //routeResult = Route.calculateRoute(Main2.this, fromAndTo,Route.WalkDefault);

 65         Route route = null;

 66         try {

 67             route = Route.calculateRoute(Main2.this, fromAndTo,Route.DrivingDefault).get(0);

 68         } catch (AMapException e) {

 69             // TODO Auto-generated catch block

 70             e.printStackTrace();

 71         }  //这里只取出查询路径的第一条

 72          if (route != null) {

 73             RouteOverlay routeOverlay = new RouteOverlay (Main2.this,mMapView, route);

 74             routeOverlay.removeFormMap();

 75             routeOverlay.addMarkerLine();

 76             }

 77 

 78 

 79     }

 80     

 81     //初始化一个Criteria 对象,设置相关参数,此对象自动匹配最适合的定位类型。调用enableMyLocation函数启动定位模块,disableMyLocation 函数关闭定位模块。   

 82       

 83     //根据Criteria 对象获取提供位置信息的provider,并启动定位模块   

 84       

 85         @SuppressLint("ParserError")

 86         public boolean enableMyLocation() {  

 87       

 88        

 89       

 90                boolean result = true;  

 91       

 92                Criteria cri = new Criteria();   

 93       

 94                cri.setAccuracy(Criteria.ACCURACY_COARSE);  

 95       

 96                cri.setAltitudeRequired(false);  

 97       

 98                cri.setBearingRequired(false);  

 99       

100                cri.setCostAllowed(false);  

101       

102                String bestProvider = locationManager.getBestProvider(cri, true);  

103       

104                locationManager.requestLocationUpdates(bestProvider, 10000, 10,  

105       

106                              this);  

107                Log.i("out", "1");

108                return result;  

109       

110         }  

111       

112     // 关闭定位模块   

113       

114         public void disableMyLocation() {  

115       

116                locationManager.removeUpdates(this);  

117                locationManager =null;  

118       

119         }  

120 

121       //LocationListener 的监听接口   

122         

123         @Override  

124       

125         public void onLocationChanged(Location location) {  

126       

127                // TODO Auto-generated method stub   

128       

129                if (location != null) {  

130       

131                       Double geoLat = location.getLatitude();  

132       

133                       Double geoLng = location.getLongitude();  

134       

135                       String str =("定位成功1:(" + geoLng + "," + geoLat + ")");  

136       

137                      Log.i("out","str1="+str);

138       

139                }else{

140                    Log.i("out", "null");

141                }

142       

143         }

144         @Override

145         public void onProviderDisabled(String provider) {

146             // TODO Auto-generated method stub

147             

148         }

149 

150         @Override

151         public void onProviderEnabled(String provider) {

152             // TODO Auto-generated method stub

153             enableMyLocation();

154         }

155 

156         @Override

157         public void onStatusChanged(String provider, int status, Bundle extras) {

158             // TODO Auto-generated method stub

159             

160         }

161 

162         @Override

163         public void onLocationChanged(AMapLocation arg0) {

164             // TODO Auto-generated method stub

165             if (arg0 != null) {  

166                   

167                 Double geoLat = arg0.getLatitude();  

168 

169                 Double geoLng = arg0.getLongitude();  

170                 Bundle locBundle = arg0.getExtras();

171                 if (locBundle != null) {

172                      // 城市编码及位置描述

173                     String cityCode = locBundle.getString("citycode");

174                     String desc = locBundle.getString("desc");

175                 }

176 

177                 String str =("定位成功2:(" + geoLng + "," + geoLat + ")");  

178 

179                Log.i("out","str2="+str+"citycode="+locBundle.getString("citycode")+",addr="+locBundle.getString("desc"));

180 

181          }else{

182              Log.i("out", "null");

183          }

184         }

185 

186 }

工具类,画图:

RouteOverlay.java

package com.xmb.test_1;



import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;



import android.content.Context;

import android.graphics.Color;

import android.text.Spanned;

import android.view.Gravity;

import android.view.View;

import android.widget.LinearLayout;

import android.widget.TextView;



import com.amap.api.maps.AMap;

import com.amap.api.maps.AMap.InfoWindowAdapter;

import com.amap.api.maps.AMap.OnMarkerClickListener;

import com.amap.api.maps.CameraUpdateFactory;

import com.amap.api.maps.model.BitmapDescriptor;

import com.amap.api.maps.model.BitmapDescriptorFactory;

import com.amap.api.maps.model.LatLng;

import com.amap.api.maps.model.Marker;

import com.amap.api.maps.model.MarkerOptions;

import com.amap.api.maps.model.PolylineOptions;

import com.amap.api.search.core.LatLonPoint;

import com.amap.api.search.route.BusSegment;

import com.amap.api.search.route.DriveSegment;

import com.amap.api.search.route.WalkSegment;

import com.amap.api.search.route.Route;

import com.amap.api.search.route.Segment;

public class RouteOverlay implements OnMarkerClickListener, InfoWindowAdapter {



    private AMap mMap;

    private Route mRoute;

    private LatLng startPoint;

    private LatLng endPoint;

    private Context mContext;

    private Map<Integer, Marker> markerMap;

    private int currentIndex = 0;

    private static int zoomLevel = 15;



    public RouteOverlay(Context context, AMap map, Route route) {

        mContext = context;

        mMap = map;

        mRoute = route;

        mMap.setOnMarkerClickListener(this);

        mMap.setInfoWindowAdapter(this);

        startPoint = SearchPointConvert(route.getStartPos());

        endPoint = SearchPointConvert(route.getTargetPos());

        markerMap = new HashMap<Integer, Marker>();

    }



    /**

     * 绘制节点和线路

     */

    public void addMarkerLine() {

        Marker startMarker = mMap.addMarker((new MarkerOptions())

                .position(startPoint)

                .icon(BitmapDescriptorFactory.fromResource(R.drawable.start))

                .title("0"));

        startMarker.showInfoWindow();

        mMap.moveCamera(CameraUpdateFactory

                .newLatLngZoom(startPoint, zoomLevel));

        markerMap.put(0, startMarker);

        for (int i = 0; i < mRoute.getStepCount(); i++) {

            if (i != 0) {

                Segment segment = mRoute.getStep(i);

                BitmapDescriptor icon = null;



                if (segment instanceof BusSegment) {

                    icon = BitmapDescriptorFactory.fromResource(R.drawable.little);

                } else if (segment instanceof WalkSegment) {

                    icon = BitmapDescriptorFactory.fromResource(R.drawable.little);

                } else if (segment instanceof DriveSegment) {

                    icon = BitmapDescriptorFactory.fromResource(R.drawable.little);

                }

                Marker tempMarker = mMap.addMarker((new MarkerOptions())

                        .position(

                                SearchPointConvert(mRoute.getStep(i)

                                        .getFirstPoint())).icon(icon)

                        .anchor(0.5f, 0.5f).title("" + i));

                markerMap.put(i, tempMarker);



            }

            mMap.addPolyline((new PolylineOptions())

                    .addAll(convertArrList(mRoute.getStep(i).getShapes()))

                    .color(Color.argb(180, 54, 114, 227)).width(20.9F));

        }

        Marker targerMarker = mMap.addMarker((new MarkerOptions())

                .position(endPoint)

                .icon(BitmapDescriptorFactory.fromResource(R.drawable.end))

                .title("" + (mRoute.getStepCount())));

        markerMap.put(mRoute.getStepCount(), targerMarker);



    }



    /**

     * 清除绘制

     */

    public void removeFormMap() {

        currentIndex = 0;

        mMap.clear();

    }



    public boolean showPrePopInfo() {

        if (currentIndex > 0) {

            currentIndex--;

            Marker merker = markerMap.get(currentIndex);

            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(

                    merker.getPosition(), zoomLevel));

            merker.showInfoWindow();

        }

        if (currentIndex == 0) {

            return false;

        } else {

            return true;

        }

    }



    public boolean showNextPopInfo() {

        if (currentIndex < mRoute.getStepCount()) {

            currentIndex++;

            Marker merker = markerMap.get(currentIndex);

            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(

                    merker.getPosition(), zoomLevel));

            merker.showInfoWindow();

        }

        if(currentIndex == mRoute.getStepCount()){

            return false;

        }else{

            return true;

        }

    }



    @Override

    public boolean onMarkerClick(Marker marker) {

        marker.showInfoWindow();

        currentIndex = Integer.parseInt(marker.getTitle());

        return false;

    }



    @Override

    public View getInfoContents(Marker arg0) {

        int index = Integer.parseInt(arg0.getTitle());

        return getInfoView(mContext, index);

    }



    @Override

    public View getInfoWindow(Marker arg0) {

        return null;

    }



    /**

     * 根据Segment index 生成popInfo view

     * 

     * @param index

     * @return

     */

    public View getInfoView(Context cnt, int index) {

        if (index < 0 || index > mRoute.getStepCount()) {

            return null;

        }



        LinearLayout ll_parents = new LinearLayout(cnt);

        ll_parents.setOrientation(LinearLayout.VERTICAL);

        ll_parents.setBackgroundResource(R.drawable.custom_info_bubble);



        LinearLayout ll_child1 = new LinearLayout(cnt);

        ll_child1.setOrientation(LinearLayout.HORIZONTAL);

        ll_child1.setGravity(Gravity.AXIS_PULL_BEFORE);

        TextView titleVw = new TextView(cnt);

        String spannedInfos[] = getSpannedInfo(index).toString()

                .split("\\n", 2);

        titleVw.setTextColor(Color.BLACK);

        titleVw.setText(AMapUtil.stringToSpan(spannedInfos[0]));

        titleVw.setPadding(3, 0, 0, 3);

        ll_child1.addView(titleVw, new LinearLayout.LayoutParams(

                LinearLayout.LayoutParams.FILL_PARENT,

                LinearLayout.LayoutParams.WRAP_CONTENT));



        TextView backgroud = new TextView(cnt);

        backgroud.setBackgroundColor(Color.rgb(165, 166, 165));

        backgroud.setLayoutParams(new LinearLayout.LayoutParams(

                LinearLayout.LayoutParams.FILL_PARENT, 1));



        LinearLayout ll_child3 = new LinearLayout(cnt);

        ll_child3.setOrientation(LinearLayout.VERTICAL);



        TextView titleVwdown = new TextView(cnt);

        if (spannedInfos.length == 2) {

            ll_child3.addView(backgroud, new LinearLayout.LayoutParams(

                    LinearLayout.LayoutParams.FILL_PARENT, 1));



            titleVwdown.setText(AMapUtil.stringToSpan(spannedInfos[1]));

            titleVwdown.setTextColor(Color.rgb(82, 85, 82));

            ll_child3.addView(titleVwdown, new LinearLayout.LayoutParams(

                    LinearLayout.LayoutParams.FILL_PARENT,

                    LinearLayout.LayoutParams.WRAP_CONTENT));

        }



        LinearLayout ll_child2 = new LinearLayout(cnt);

        ll_child2.setOrientation(LinearLayout.HORIZONTAL);

        ll_child2.setGravity(Gravity.CENTER_HORIZONTAL);



        ll_parents.addView(ll_child1, new LinearLayout.LayoutParams(

                LinearLayout.LayoutParams.FILL_PARENT,

                LinearLayout.LayoutParams.WRAP_CONTENT));



        ll_parents.addView(ll_child3, new LinearLayout.LayoutParams(

                LinearLayout.LayoutParams.FILL_PARENT, 1));



        ll_parents.addView(ll_child2, new LinearLayout.LayoutParams(

                LinearLayout.LayoutParams.FILL_PARENT,

                LinearLayout.LayoutParams.WRAP_CONTENT));



        return ll_parents;

    }



    /**

     * 获取popInfo描述

     * 

     * @param index

     * @return

     */

    public Spanned getSpannedInfo(int index) {

        if (index == mRoute.getStepCount()) {

            StringBuffer buf = new StringBuffer();

            buf.append(ChString.Arrive);

            buf.append(mRoute.getTargetPlace());

            return AMapUtil.stringToSpan(buf.toString());

        }

        if (mRoute.getStep(index) instanceof BusSegment) {

            return getBusSpan(index);

        } else if (mRoute.getStep(index) instanceof DriveSegment) {

            return getCarInfo(index);

        }



        return getFootSpan(index);

    }



    /**

     * 获取公交popInfo描述

     * 

     * @param index

     * @return

     */

    private Spanned getBusSpan(int index) {

        BusSegment seg = (BusSegment) mRoute.getStep(index);

        StringBuffer buf = new StringBuffer();



        buf.append(AMapUtil.colorFont(seg.getLineName(), AMapUtil.HtmlBlack));

        buf.append(AMapUtil.makeHtmlSpace(3));

        buf.append(AMapUtil.colorFont(seg.getLastStationName(),

                AMapUtil.HtmlBlack));

        buf.append(ChString.Direction);

        buf.append(AMapUtil.makeHtmlNewLine());



        buf.append(ChString.GetOn + " : ");

        buf.append(AMapUtil.colorFont(seg.getOnStationName(),

                AMapUtil.HtmlBlack));

        buf.append(AMapUtil.makeHtmlSpace(3));

        buf.append(AMapUtil.makeHtmlNewLine());



        buf.append(ChString.GetOff + " : ");

        buf.append(AMapUtil.colorFont(seg.getOffStationName(),

                AMapUtil.HtmlBlack));

        buf.append(AMapUtil.makeHtmlNewLine());

        buf.append(String.format("%s%d%s , ", ChString.Gong,

                seg.getStopNumber() - 1, ChString.Zhan));



        buf.append(ChString.About + AMapUtil.getFriendlyLength(seg.getLength()));



        return AMapUtil.stringToSpan(buf.toString());

    }



    /**

     * 获取驾车popInfo描述

     * 

     * @param index

     * @return

     */

    public Spanned getCarInfo(int index) {

        String content = "";

        DriveSegment seg = (DriveSegment) mRoute.getStep(index);

        if (!AMapUtil.IsEmptyOrNullString(seg.getRoadName())

                && !AMapUtil.IsEmptyOrNullString(seg.getActionDescription())) {

            content = seg.getActionDescription() + " --> " + seg.getRoadName();

        } else {

            content = seg.getActionDescription() + seg.getRoadName();

        }



        content = AMapUtil.colorFont(content, AMapUtil.HtmlGray);

        content += AMapUtil.makeHtmlNewLine();

        content += String.format("%s%s", ChString.About,

                AMapUtil.getFriendlyLength(seg.getLength()));



        return AMapUtil.stringToSpan(content);

    }



    /**

     * 获取步行popInfo描述

     * 

     * @param index

     * @return

     */

    private Spanned getFootSpan(int index) {

        if (mRoute.getMode() == Route.WalkDefault) {

            String content = "";

            WalkSegment seg = (WalkSegment) mRoute.getStep(index);

            if (!AMapUtil.IsEmptyOrNullString(seg.getRoadName())

                    && !AMapUtil

                            .IsEmptyOrNullString(seg.getActionDescription())) {

                content = seg.getActionDescription() + " --> "

                        + seg.getRoadName();

            } else {

                content = seg.getActionDescription() + seg.getRoadName();

            }



            content = AMapUtil.colorFont(content, AMapUtil.HtmlGray);

            content += AMapUtil.makeHtmlNewLine();

            content += String.format("%s%s", ChString.About,

                    AMapUtil.getFriendlyLength(seg.getLength()));



            return AMapUtil.stringToSpan(content);

        } else {

            StringBuilder result = new StringBuilder();

            result.append(ChString.ByFoot).append(ChString.To);



            if (index == mRoute.getStepCount() - 1) {

                result.append(AMapUtil.colorFont(ChString.TargetPlace,

                        AMapUtil.HtmlGray));

            } else {

                result.append(AMapUtil.colorFont(

                        ((BusSegment) mRoute.getStep(index + 1)).getLineName()

                                + ChString.Station, AMapUtil.HtmlGray));

            }



            result.append(AMapUtil.makeHtmlNewLine());

            result.append(ChString.About

                    + AMapUtil.getFriendlyLength(mRoute.getStep(index)

                            .getLength()));



            return AMapUtil.stringToSpan(result.toString());

        }

    }



    /**

     * 工具方法, 将一个segment shaps 转化成map的LatLng list 方便添加到地图

     * 

     * @param shapes

     * @return

     */

    private ArrayList<LatLng> convertArrList(LatLonPoint[] shapes) {

        ArrayList<LatLng> lineShapes = new ArrayList<LatLng>();

        for (LatLonPoint point : shapes) {

            LatLng latLngTemp = SearchPointConvert(point);

            lineShapes.add(latLngTemp);

        }

        return lineShapes;

    }

    /**

     * 工具方法,将搜索得到的LatLonPoint转成latLng 才能添加到地图上

     * 

     * @param latLonPoint

     * @return

     */

    private LatLng SearchPointConvert(LatLonPoint latLonPoint) {

        return new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude());

    }

}

ChString.java

package com.xmb.test_1;



public class ChString {

    public static final String Kilometer = "\u516c\u91cc";// "公里";

    public static final String Meter = "\u7c73";// "米";

    public static final String ByFoot = "\u6b65\u884c";// "步行";

    public static final String To = "\u53bb\u5f80";// "去往";

    public static final String Station = "\u8f66\u7ad9";// "车站";

    public static final String TargetPlace = "\u76ee\u7684\u5730";// "目的地";

    public static final String StartPlace = "\u51fa\u53d1\u5730";// "出发地";

    public static final String About = "\u5927\u7ea6";// "大约";

    public static final String Direction = "\u65b9\u5411";// "方向";



    public static final String GetOn = "\u4e0a\u8f66";// "上车";

    public static final String GetOff = "\u4e0b\u8f66";// "下车";

    public static final String Zhan = "\u7ad9";// "站";



    public static final String cross = "\u4ea4\u53c9\u8def\u53e3"; // 交叉路口

    public static final String type = "\u7c7b\u522b"; // 类别

    public static final String address = "\u5730\u5740"; // 地址

    public static final String PrevStep = "\u4e0a\u4e00\u6b65";

    public static final String NextStep = "\u4e0b\u4e00\u6b65";

    public static final String Gong = "\u516c\u4ea4";

    public static final String ByBus = "\u4e58\u8f66";

    public static final String Arrive =  "\u5230\u8FBE";// 到达

}

 

 

你可能感兴趣的:(demo)