Android高德地图使用

来源:互联网 发布:java常用工具 编辑:程序博客网 时间:2024/05/01 03:04

在Swift基础 - - 高德地图实践(一)中使用Swift来使用高德地图,这里使用Android实践高德地图包含定位,移动地图动画,获取网络数据,marker标记以及点击,Infowindow自定义界面以及点击,以及点击无marker地图上面隐藏infowindow等功能。直接看代码

[java] view plain copy
 print?
  1. package com.carmap.ui;  
  2.   
  3. import android.graphics.Color;  
  4. import android.location.Location;  
  5. import android.os.Bundle;  
  6. import android.util.Log;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.view.animation.Animation;  
  10. import android.view.animation.Animation.AnimationListener;  
  11. import android.view.animation.AnimationUtils;  
  12. import android.widget.ImageView;  
  13.   
  14. import com.amap.api.location.AMapLocation;  
  15. import com.amap.api.location.AMapLocationListener;  
  16. import com.amap.api.location.LocationManagerProxy;  
  17. import com.amap.api.location.LocationProviderProxy;  
  18. import com.amap.api.maps.AMap;  
  19. import com.amap.api.maps.AMap.InfoWindowAdapter;  
  20. import com.amap.api.maps.AMap.OnCameraChangeListener;  
  21. import com.amap.api.maps.AMap.OnInfoWindowClickListener;  
  22. import com.amap.api.maps.AMap.OnMapClickListener;  
  23. import com.amap.api.maps.AMap.OnMapLoadedListener;  
  24. import com.amap.api.maps.AMap.OnMarkerClickListener;  
  25. import com.amap.api.maps.CameraUpdateFactory;  
  26. import com.amap.api.maps.LocationSource;  
  27. import com.amap.api.maps.MapView;  
  28. import com.amap.api.maps.UiSettings;  
  29. import com.amap.api.maps.model.BitmapDescriptorFactory;  
  30. import com.amap.api.maps.model.CameraPosition;  
  31. import com.amap.api.maps.model.LatLng;  
  32. import com.amap.api.maps.model.Marker;  
  33. import com.amap.api.maps.model.MarkerOptions;  
  34. import com.amap.api.maps.model.MyLocationStyle;  
  35. import com.carmap.R;  
  36. import com.carmap.ui.base.BaseActivity;  
  37.   
  38. /** 
  39.  *  
  40.  * @author jwzhangjie 
  41.  * 
  42.  */  
  43. public class MapActivity extends BaseActivity implements AMapLocationListener,  
  44.         LocationSource, OnMarkerClickListener, OnInfoWindowClickListener,  
  45.         InfoWindowAdapter, OnMapLoadedListener, OnCameraChangeListener,  
  46.         AnimationListener, OnClickListener, OnMapClickListener {  
  47.   
  48.     private MapView mapView;  
  49.     private AMap aMap;  
  50.     private LocationManagerProxy aMapManager;  
  51.     private OnLocationChangedListener mListener;  
  52.     private UiSettings mUiSettings;  
  53.     private AMapLocation aLocation;  
  54.   
  55.     private Animation centerMarker;  
  56.     private ImageView centerImageView;  
  57.     private Marker currentMarker;  
  58.   
  59.     private boolean isFirst = true;  
  60.   
  61.     private ImageView locate;  
  62.   
  63.     @Override  
  64.     protected void onCreate(Bundle savedInstanceState) {  
  65.         super.onCreate(savedInstanceState);  
  66.         setContentView(R.layout.activity_map);  
  67.         mapView = (MapView) findViewById(R.id.mapView);  
  68.         mapView.onCreate(savedInstanceState);// 此方法必须重写  
  69.         centerMarker = AnimationUtils.loadAnimation(this,  
  70.                 R.anim.center_map_bounds);  
  71.         centerImageView = (ImageView) findViewById(R.id.centerMarkerImg);  
  72.         locate = (ImageView) findViewById(R.id.locate);  
  73.         initMap();  
  74.     }  
  75.   
  76.     /** 
  77.      * 初始化AMap对象 
  78.      */  
  79.     private void initMap() {  
  80.         if (aMap == null) {  
  81.             aMap = mapView.getMap();  
  82.             mUiSettings = aMap.getUiSettings();  
  83.         }  
  84.         // 自定义系统定位小蓝点  
  85.         MyLocationStyle myLocationStyle = new MyLocationStyle();  
  86.         myLocationStyle.myLocationIcon(BitmapDescriptorFactory  
  87.                 .fromResource(R.drawable.transdrawable));// 设置小蓝点的图标  
  88.         myLocationStyle.strokeColor(Color.argb(0000));// 设置圆形的边框颜色  
  89.         myLocationStyle.radiusFillColor(Color.argb(0000));// 设置圆形的填充颜色  
  90.         myLocationStyle.strokeWidth(0f);// 设置圆形的边框粗细  
  91.         aMap.setMyLocationStyle(myLocationStyle);  
  92.         aMap.setMyLocationRotateAngle(180);  
  93.         aMap.setLocationSource(this);// 设置定位监听  
  94.         mUiSettings.setMyLocationButtonEnabled(false); // 是否显示默认的定位按钮  
  95.         aMap.setMyLocationEnabled(true);// 是否可触发定位并显示定位层  
  96.         aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);  
  97.         mUiSettings.setTiltGesturesEnabled(false);// 设置地图是否可以倾斜  
  98.         mUiSettings.setScaleControlsEnabled(true);// 设置地图默认的比例尺是否显示  
  99.         mUiSettings.setZoomControlsEnabled(false);  
  100.         initMapListener();  
  101.     }  
  102.   
  103.     private void initMapListener() {  
  104.         aMap.setOnMapLoadedListener(this);  
  105.         aMap.setOnCameraChangeListener(this);  
  106.         aMap.setOnMarkerClickListener(this);  
  107.         aMap.setOnInfoWindowClickListener(this);  
  108.         aMap.setInfoWindowAdapter(this);// 设置自定义InfoWindow样式  
  109.         aMap.setOnMapClickListener(this);  
  110.         centerMarker.setAnimationListener(this);  
  111.         locate.setOnClickListener(this);  
  112.     }  
  113.   
  114.     /** 
  115.      * 方法必须重写 
  116.      */  
  117.     @Override  
  118.     protected void onResume() {  
  119.         super.onResume();  
  120.         mapView.onResume();  
  121.     }  
  122.   
  123.     /** 
  124.      * 方法必须重写 
  125.      */  
  126.     @Override  
  127.     protected void onPause() {  
  128.         super.onPause();  
  129.         mapView.onPause();  
  130.     }  
  131.   
  132.     /** 
  133.      * 方法必须重写 
  134.      */  
  135.     @Override  
  136.     protected void onSaveInstanceState(Bundle outState) {  
  137.         super.onSaveInstanceState(outState);  
  138.         mapView.onSaveInstanceState(outState);  
  139.     }  
  140.   
  141.     /** 
  142.      * 方法必须重写 
  143.      */  
  144.     @Override  
  145.     protected void onDestroy() {  
  146.         super.onDestroy();  
  147.         mapView.onDestroy();  
  148.     }  
  149.   
  150.     @Override  
  151.     public void onLocationChanged(Location location) {  
  152.   
  153.     }  
  154.   
  155.     @Override  
  156.     public void onStatusChanged(String provider, int status, Bundle extras) {  
  157.   
  158.     }  
  159.   
  160.     @Override  
  161.     public void onProviderEnabled(String provider) {  
  162.   
  163.     }  
  164.   
  165.     @Override  
  166.     public void onProviderDisabled(String provider) {  
  167.   
  168.     }  
  169.   
  170.     @Override  
  171.     public void onLocationChanged(AMapLocation aLocation) {  
  172.         if (aLocation != null) {  
  173.             this.aLocation = aLocation;  
  174.             if (mListener != null)  
  175.                 mListener.onLocationChanged(aLocation);// 显示系统小蓝点  
  176.             if (isFirst) {  
  177.                 isFirst = false;  
  178.                 aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(  
  179.                         aLocation.getLatitude(), aLocation.getLongitude())));  
  180.                 CameraUpdateFactory.zoomTo(16);  
  181.                 MarkerOptions markerOption = new MarkerOptions();  
  182.                 markerOption.position(new LatLng(aLocation.getLatitude(),  
  183.                         aLocation.getLongitude()));  
  184.                 markerOption.title("上海市").snippet("上海:34.341568, 108.940174");  
  185.                 markerOption.draggable(true);  
  186.                 Marker marker = aMap.addMarker(markerOption);  
  187.                 marker.setObject("11");//这里可以存储用户数据  
  188.             }  
  189.         }  
  190.     }  
  191.   
  192.     @SuppressWarnings("deprecation")  
  193.     @Override  
  194.     public void activate(OnLocationChangedListener listener) {  
  195.         mListener = listener;  
  196.         if (aMapManager == null) {  
  197.             aMapManager = LocationManagerProxy.getInstance(this);  
  198.             /* 
  199.              * 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true 
  200.              */  
  201.             // Location API定位采用GPS和网络混合定位方式,时间最短是2000毫秒  
  202.             aMapManager.requestLocationUpdates(  
  203.                     LocationProviderProxy.AMapNetwork, 200010this);  
  204.         }  
  205.     }  
  206.   
  207.     /** 
  208.      * 停止定位 
  209.      */  
  210.     @Override  
  211.     public void deactivate() {  
  212.         mListener = null;  
  213.         if (aMapManager != null) {  
  214.             aMapManager.removeUpdates(this);  
  215.             aMapManager.destory();  
  216.         }  
  217.         aMapManager = null;  
  218.     }  
  219.   
  220.     @Override  
  221.     public boolean onMarkerClick(Marker marker) {  
  222.         currentMarker = marker;  
  223.         Log.e("marker", marker.getObject() + "marker: " + marker.getPosition().latitude+" : "+marker);  
  224.         return false;  
  225.     }  
  226.   
  227.     @Override  
  228.     public View getInfoContents(Marker marker) {  
  229.         Log.e("marker",  
  230.                 marker.getObject() + "getInfoContents: " + marker.getId());  
  231.         return null;  
  232.     }  
  233.   
  234.     @Override  
  235.     public View getInfoWindow(Marker marker) {  
  236.         Log.e("marker", marker.getObject() + "getInfoWindow: " + marker.getId());  
  237.         View infoWindow = getLayoutInflater().inflate(  
  238.                 R.layout.custom_info_window, null);  
  239.         render(marker, infoWindow);  
  240.         return infoWindow;  
  241.     }  
  242.   
  243.     @Override  
  244.     public void onInfoWindowClick(Marker marker) {  
  245.         Log.e("marker",  
  246.                 marker.getObject() + "onInfoWindowClick: " + marker.getId());  
  247.   
  248.     }  
  249.   
  250.     @Override  
  251.     public void onMapLoaded() {  
  252.         centerImageView.startAnimation(centerMarker);  
  253.         CameraUpdateFactory.zoomTo(16);  
  254.         Log.e("load""onMapLoaded");  
  255.   
  256.     }  
  257.   
  258.     @Override  
  259.     public void onCameraChange(CameraPosition arg0) {  
  260.     }  
  261.   
  262.     @Override  
  263.     public void onCameraChangeFinish(CameraPosition arg0) {  
  264.         centerImageView.startAnimation(centerMarker);  
  265.         Log.e("load""onCameraChangeFinish+获取后台数据");  
  266.     }  
  267.   
  268.     @Override  
  269.     public void onAnimationStart(Animation animation) {  
  270.         centerImageView.setImageResource(R.drawable.green_pin_lift);  
  271.     }  
  272.   
  273.     @Override  
  274.     public void onAnimationRepeat(Animation animation) {  
  275.   
  276.     }  
  277.   
  278.     @Override  
  279.     public void onAnimationEnd(Animation animation) {  
  280.         centerImageView.setImageResource(R.drawable.green_pin);  
  281.     }  
  282.   
  283.     @Override  
  284.     public void onClick(View v) {  
  285.         int id = v.getId();  
  286.         switch (id) {  
  287.         case R.id.locate:  
  288.             Log.e("load""locate");  
  289.             aMap.animateCamera(CameraUpdateFactory.changeLatLng(new LatLng(  
  290.                     aLocation.getLatitude(), aLocation.getLongitude())));  
  291.             break;  
  292.         default:  
  293.             break;  
  294.         }  
  295.     }  
  296.   
  297.     /** 
  298.      * 自定义infowinfow窗口,动态修改内容的 
  299.      */  
  300.     public void render(Marker marker, View view) {  
  301.   
  302.     }  
  303.   
  304.     // 点击非marker区域,将显示的InfoWindow隐藏  
  305.     @Override  
  306.     public void onMapClick(LatLng latLng) {  
  307.         if (currentMarker != null) {  
  308.             currentMarker.hideInfoWindow();  
  309.         }  
  310.     }  
  311. }  
[java] view plain copy
 print?
  1. package com.carmap.ui.base;  
  2.   
  3. import android.content.Intent;  
  4. import android.support.v4.app.FragmentActivity;  
  5.   
  6. /** 
  7.  *  
  8.  * @author jwzhangjie 
  9.  * 
  10.  */  
  11. public class BaseActivity extends FragmentActivity{  
  12.   
  13.     public Intent startIntent;  
  14.       
  15.       
  16.     public void startChange(Class name){  
  17.         startIntent = new Intent();  
  18.         startIntent.setClass(this, name);  
  19.         startActivity(startIntent);  
  20.     }  
  21.       
  22.     public void startChange(Class name, boolean close){  
  23.         startChange(name);  
  24.         if(close)finish();  
  25.     }  
  26.       
  27.       
  28. }  

处于地图中心点的图片的弹跳动画设置如下,bounce_interpolator是一个弹跳的动画,在弹跳和停止是两张不同的图片,所以在onAnimationStart和onAnimationEnd分别设置。

[html] view plain copy
 print?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:fillAfter="true"  
  4.     android:fillEnabled="true"  
  5.     android:interpolator="@android:anim/bounce_interpolator" >  
  6.   
  7.     <translate  
  8.         android:duration="1000"  
  9.         android:fromYDelta="-100%"  
  10.         android:toYDelta="0%" />  
  11.       
  12. </set>  
[java] view plain copy
 print?
  1. @Override  
  2.     public void onAnimationStart(Animation animation) {  
  3.         centerImageView.setImageResource(R.drawable.green_pin_lift);  
  4.     }  
  5.   
  6.     @Override  
  7.     public void onAnimationRepeat(Animation animation) {  
  8.   
  9.     }  
  10.   
  11.     @Override  
  12.     public void onAnimationEnd(Animation animation) {  
  13.         centerImageView.setImageResource(R.drawable.green_pin);  
  14.     }  


上面的MapActivity.Java包含了以上功能





0 0