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

package com.carmap.ui;import android.graphics.Color;import android.location.Location;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.AnimationUtils;import android.widget.ImageView;import com.amap.api.location.AMapLocation;import com.amap.api.location.AMapLocationListener;import com.amap.api.location.LocationManagerProxy;import com.amap.api.location.LocationProviderProxy;import com.amap.api.maps.AMap;import com.amap.api.maps.AMap.InfoWindowAdapter;import com.amap.api.maps.AMap.OnCameraChangeListener;import com.amap.api.maps.AMap.OnInfoWindowClickListener;import com.amap.api.maps.AMap.OnMapClickListener;import com.amap.api.maps.AMap.OnMapLoadedListener;import com.amap.api.maps.AMap.OnMarkerClickListener;import com.amap.api.maps.CameraUpdateFactory;import com.amap.api.maps.LocationSource;import com.amap.api.maps.MapView;import com.amap.api.maps.UiSettings;import com.amap.api.maps.model.BitmapDescriptorFactory;import com.amap.api.maps.model.CameraPosition;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.MyLocationStyle;import com.carmap.R;import com.carmap.ui.base.BaseActivity;/** *  * @author jwzhangjie * */public class MapActivity extends BaseActivity implements AMapLocationListener,LocationSource, OnMarkerClickListener, OnInfoWindowClickListener,InfoWindowAdapter, OnMapLoadedListener, OnCameraChangeListener,AnimationListener, OnClickListener, OnMapClickListener {private MapView mapView;private AMap aMap;private LocationManagerProxy aMapManager;private OnLocationChangedListener mListener;private UiSettings mUiSettings;private AMapLocation aLocation;private Animation centerMarker;private ImageView centerImageView;private Marker currentMarker;private boolean isFirst = true;private ImageView locate;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_map);mapView = (MapView) findViewById(R.id.mapView);mapView.onCreate(savedInstanceState);// 此方法必须重写centerMarker = AnimationUtils.loadAnimation(this,R.anim.center_map_bounds);centerImageView = (ImageView) findViewById(R.id.centerMarkerImg);locate = (ImageView) findViewById(R.id.locate);initMap();}/** * 初始化AMap对象 */private void initMap() {if (aMap == null) {aMap = mapView.getMap();mUiSettings = aMap.getUiSettings();}// 自定义系统定位小蓝点MyLocationStyle myLocationStyle = new MyLocationStyle();myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.transdrawable));// 设置小蓝点的图标myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0));// 设置圆形的边框颜色myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0));// 设置圆形的填充颜色myLocationStyle.strokeWidth(0f);// 设置圆形的边框粗细aMap.setMyLocationStyle(myLocationStyle);aMap.setMyLocationRotateAngle(180);aMap.setLocationSource(this);// 设置定位监听mUiSettings.setMyLocationButtonEnabled(false); // 是否显示默认的定位按钮aMap.setMyLocationEnabled(true);// 是否可触发定位并显示定位层aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);mUiSettings.setTiltGesturesEnabled(false);// 设置地图是否可以倾斜mUiSettings.setScaleControlsEnabled(true);// 设置地图默认的比例尺是否显示mUiSettings.setZoomControlsEnabled(false);initMapListener();}private void initMapListener() {aMap.setOnMapLoadedListener(this);aMap.setOnCameraChangeListener(this);aMap.setOnMarkerClickListener(this);aMap.setOnInfoWindowClickListener(this);aMap.setInfoWindowAdapter(this);// 设置自定义InfoWindow样式aMap.setOnMapClickListener(this);centerMarker.setAnimationListener(this);locate.setOnClickListener(this);}/** * 方法必须重写 */@Overrideprotected void onResume() {super.onResume();mapView.onResume();}/** * 方法必须重写 */@Overrideprotected void onPause() {super.onPause();mapView.onPause();}/** * 方法必须重写 */@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mapView.onSaveInstanceState(outState);}/** * 方法必须重写 */@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();}@Overridepublic void onLocationChanged(Location location) {}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}@Overridepublic void onLocationChanged(AMapLocation aLocation) {if (aLocation != null) {this.aLocation = aLocation;if (mListener != null)mListener.onLocationChanged(aLocation);// 显示系统小蓝点if (isFirst) {isFirst = false;aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aLocation.getLatitude(), aLocation.getLongitude())));CameraUpdateFactory.zoomTo(16);MarkerOptions markerOption = new MarkerOptions();markerOption.position(new LatLng(aLocation.getLatitude(),aLocation.getLongitude()));markerOption.title("上海市").snippet("上海:34.341568, 108.940174");markerOption.draggable(true);Marker marker = aMap.addMarker(markerOption);marker.setObject("11");//这里可以存储用户数据}}}@SuppressWarnings("deprecation")@Overridepublic void activate(OnLocationChangedListener listener) {mListener = listener;if (aMapManager == null) {aMapManager = LocationManagerProxy.getInstance(this);/* * 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true */// Location API定位采用GPS和网络混合定位方式,时间最短是2000毫秒aMapManager.requestLocationUpdates(LocationProviderProxy.AMapNetwork, 2000, 10, this);}}/** * 停止定位 */@Overridepublic void deactivate() {mListener = null;if (aMapManager != null) {aMapManager.removeUpdates(this);aMapManager.destory();}aMapManager = null;}@Overridepublic boolean onMarkerClick(Marker marker) {currentMarker = marker;Log.e("marker", marker.getObject() + "marker: " + marker.getPosition().latitude+" : "+marker);return false;}@Overridepublic View getInfoContents(Marker marker) {Log.e("marker",marker.getObject() + "getInfoContents: " + marker.getId());return null;}@Overridepublic View getInfoWindow(Marker marker) {Log.e("marker", marker.getObject() + "getInfoWindow: " + marker.getId());View infoWindow = getLayoutInflater().inflate(R.layout.custom_info_window, null);render(marker, infoWindow);return infoWindow;}@Overridepublic void onInfoWindowClick(Marker marker) {Log.e("marker",marker.getObject() + "onInfoWindowClick: " + marker.getId());}@Overridepublic void onMapLoaded() {centerImageView.startAnimation(centerMarker);CameraUpdateFactory.zoomTo(16);Log.e("load", "onMapLoaded");}@Overridepublic void onCameraChange(CameraPosition arg0) {}@Overridepublic void onCameraChangeFinish(CameraPosition arg0) {centerImageView.startAnimation(centerMarker);Log.e("load", "onCameraChangeFinish+获取后台数据");}@Overridepublic void onAnimationStart(Animation animation) {centerImageView.setImageResource(R.drawable.green_pin_lift);}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {centerImageView.setImageResource(R.drawable.green_pin);}@Overridepublic void onClick(View v) {int id = v.getId();switch (id) {case R.id.locate:Log.e("load", "locate");aMap.animateCamera(CameraUpdateFactory.changeLatLng(new LatLng(aLocation.getLatitude(), aLocation.getLongitude())));break;default:break;}}/** * 自定义infowinfow窗口,动态修改内容的 */public void render(Marker marker, View view) {}// 点击非marker区域,将显示的InfoWindow隐藏@Overridepublic void onMapClick(LatLng latLng) {if (currentMarker != null) {currentMarker.hideInfoWindow();}}}
package com.carmap.ui.base;import android.content.Intent;import android.support.v4.app.FragmentActivity;/** *  * @author jwzhangjie * */public class BaseActivity extends FragmentActivity{public Intent startIntent;public void startChange(Class name){startIntent = new Intent();startIntent.setClass(this, name);startActivity(startIntent);}public void startChange(Class name, boolean close){startChange(name);if(close)finish();}}

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

<?xml version="1.0" encoding="utf-8"?>    
@Overridepublic void onAnimationStart(Animation animation) {centerImageView.setImageResource(R.drawable.green_pin_lift);}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {centerImageView.setImageResource(R.drawable.green_pin);}


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

Android高德地图使用_第1张图片

Android高德地图使用_第2张图片

Android高德地图使用_第3张图片


更多相关文章

  1. The import com.google cannot be resolved解决方法
  2. 在Android中解析ls 命令得到目录列表的方法
  3. android 选择本地图片并截剪图片保存到,sdcard指定目录中
  4. Android统计EditText的字母数字以及汉字的统计方法

随机推荐

  1. Android(安卓)开发学习笔记
  2. 【Android翻译】关于Activity的onSaveIns
  3. Android Service总结04 之被绑定的服务 -
  4. Android虚拟键盘弹出时挡住EditText解决
  5. Android之Activity组件
  6. Android的开发配置篇(linux平台)
  7. Android(安卓)小众良心的应用市场推荐
  8. Android aapt 工具介绍
  9. Android的swift语言-Kotlin(一)
  10. Window下android 模拟器SD卡的使用方法