基于高德地图Android API的源码

    package com.example.navistar;

    import android.content.Context;
    import android.graphics.Color;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.RadioGroup;

    import com.amap.api.location.AMapLocationClientOption;
    import com.amap.api.maps2d.AMap;
    import com.amap.api.maps2d.CameraUpdateFactory;
    import com.amap.api.maps2d.MapView;
    import com.amap.api.maps2d.model.BitmapDescriptorFactory;
    import com.amap.api.maps2d.model.LatLng;
    import com.amap.api.maps2d.model.Marker;
    import com.amap.api.maps2d.model.MarkerOptions;
    import com.amap.api.maps2d.model.PolylineOptions;

    import java.util.List;

    public class MainActivity extends AppCompatActivity {

        MapView mMapView=null;
        AMap mMap=null;
        RadioGroup mRadioGroup=null;
        LocationManager locationManager=null;
        LocationListener listener;
        LatLng prevPoint=null;
        MarkerOptions markerOption=null;
        Marker marker;
        AMapLocationClientOption mLocationOption=null;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //获取地图控件引用
            mMapView=(MapView)findViewById(R.id.mapview);
            //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
            mMapView.onCreate(savedInstanceState);

            mLocationOption=new AMapLocationClientOption();

            init();
        }

        private void init(){
            if(mMap==null){
                mMap=mMapView.getMap();
            }

            //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            mRadioGroup=(RadioGroup)findViewById(R.id.radio_map_type);

            //选择使用卫星地图还是使用普通地图
            mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
                    if(checkedId==R.id.radio_normal){
                        mMap.setMapType(AMap.MAP_TYPE_NORMAL);
                    }
                    else if(checkedId==R.id.radio_satellite){
                        mMap.setMapType(AMap.MAP_TYPE_SATELLITE);
                    }
                }
            });

            LocationListener locationListener=new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    //新的坐标点
                    LatLng point=new LatLng(location.getLatitude(),location.getLongitude());

                    //在上一个点和当前点之间绘制线段
                    if(prevPoint!=null) {
                        mMap.addPolyline(new PolylineOptions().
                                add(prevPoint, point).
                                width(10).
                                color(Color.argb(255, 120, 60, 30)));

                    }
                    prevPoint=point;

                    mMap.animateCamera(CameraUpdateFactory.changeLatLng(point));//将地图视图调整至当前点

                    //绘制当前位置的标记
                    markerOption = new MarkerOptions().icon(BitmapDescriptorFactory
                            .defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                            .position(point)
                            .draggable(true);
                    if(marker!=null){   //抹去上一次的标记
                        marker.remove();
                    }
                    marker=(Marker)mMap.addMarker(markerOption);
                }

                @Override
                public void onStatusChanged(String s, int i, Bundle bundle) {

                }

                @Override
                public void onProviderEnabled(String s) {

                }

                @Override
                public void onProviderDisabled(String s) {

                }
            };

            LocationManager manager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
            List<String>providerList=manager.getAllProviders();
            for(String provider:providerList){
                //注册当前可用所有的Provider-----这一步是不是有问题?后注册的provider会不会覆盖前一个provider?
                manager.requestLocationUpdates(provider,1000,(float)0.2,locationListener);
            }
        }
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            mMapView.onSaveInstanceState(outState);
        }

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

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

        @Override
        protected void onDestroy() {
            super.onDestroy();
            mMapView.onDestroy();
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值