Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 273|回复: 0

[默认分类] Android高德地图使用

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-25 14:30:48 | 显示全部楼层 |阅读模式


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

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

    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.     <translate
    7.         android:duration="1000"
    8.         android:fromYDelta="-100%"
    9.         android:toYDelta="0%" />
    10.        
    11. </set>
    复制代码
    1. @Override
    2.         public void onAnimationStart(Animation animation) {
    3.                 centerImageView.setImageResource(R.drawable.green_pin_lift);
    4.         }
    5.         @Override
    6.         public void onAnimationRepeat(Animation animation) {
    7.         }
    8.         @Override
    9.         public void onAnimationEnd(Animation animation) {
    10.                 centerImageView.setImageResource(R.drawable.green_pin);
    11.         }
    复制代码




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








      
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-12 13:34 , Processed in 0.350593 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表