1.效果图

2.先导入jar包,可以去官网下载 如图:

特别注意:其中地图和定位还有TabLayout在前面详细说过,这里就不重复了(所以复制全部会报错~)

http://blog.csdn.net/qq_34536167/article/details/75136799 地图定位

http://blog.csdn.net/qq_34536167/article/details/77776278 TabLayout

2.1.MapDemoActivity:


import android.app.ProgressDialog;
import android.graphics.Color;
import android.support.design.widget.TabLayout;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdate;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.MyLocationStyle;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.helloworld.demo.R;
import com.helloworld.demo.MyAdapter;
import com.helloworld.demo.util.LocationUtils;
import com.helloworld.demo.util.Tools;
import com.helloworld.demo.widget.PermissionsUtils;public class MapDemoActivity extends AppCompatActivity implements PoiSearch.OnPoiSearchListener,AMapLocationListener {private static final String TAG = "MapDemoActivity";private MapView mMapView;private ListView listView;private TabLayout tabLayout;private AMap aMap;//判断权限是否打开private boolean isNeedCheck = true;private MyLocationStyle myLocationStyle;//声明AMapLocationClient类对象public AMapLocationClient mLocationClient = null;//声明AMapLocationClientOption对象public AMapLocationClientOption mLocationOption = null;private static final int PERMISSON_REQUESTCODE = 0;private MyAdapter adapter;/*** 查询的类型*/private String BANK = "银行";private String DINING_ROOM = "餐厅";private String PLOT = "小区";private String OFFICE_BUILDINGS = "写字楼";private String BUS_STATION = "公交站";private String SUBWAY_STATION = "地铁站";private String LAVATORY = "厕所";private String SUPERMARKET = "超市";/*** 纬度、经度、城市名*/private double latitude, longitude;private String cityName;private ProgressDialog progressDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_map_demo);mMapView = (MapView) this.findViewById(R.id.map);listView = (ListView) this.findViewById(R.id.listview);tabLayout = (TabLayout) this.findViewById(R.id.tablayout);// 此方法须重写,虚拟机需要在很多情况下保存地图绘制的当前状态mMapView.onCreate(savedInstanceState);ininview();initLocation();}private void ininview() {tabLayout.addTab(tabLayout.newTab().setText(DINING_ROOM));tabLayout.addTab(tabLayout.newTab().setText(BANK));tabLayout.addTab(tabLayout.newTab().setText(PLOT));tabLayout.addTab(tabLayout.newTab().setText(OFFICE_BUILDINGS));tabLayout.addTab(tabLayout.newTab().setText(BUS_STATION));tabLayout.addTab(tabLayout.newTab().setText(SUBWAY_STATION));tabLayout.addTab(tabLayout.newTab().setText(LAVATORY));tabLayout.addTab(tabLayout.newTab().setText(SUPERMARKET));tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);LinearLayout linearLayout = (LinearLayout) tabLayout.getChildAt(0);linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);linearLayout.setDividerDrawable(ContextCompat.getDrawable(this, R.drawable.layout_divider_vertical));linearLayout.setDividerPadding(30);tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {@Overridepublic void onTabSelected(TabLayout.Tab tab) {int selPosition = tab.getPosition();if (selPosition == 0) {seartchPoiStart(DINING_ROOM);} else if (selPosition == 1) {seartchPoiStart(BANK);} else if (selPosition == 2) {seartchPoiStart(PLOT);} else if (selPosition == 3) {seartchPoiStart(OFFICE_BUILDINGS);} else if (selPosition == 4) {seartchPoiStart(BUS_STATION);} else if (selPosition == 5) {seartchPoiStart(SUBWAY_STATION);} else if (selPosition == 6) {seartchPoiStart(LAVATORY);} else {seartchPoiStart(SUPERMARKET);}Log.e(TAG, "onTabSelected: " + selPosition);}@Overridepublic void onTabUnselected(TabLayout.Tab tab) {}@Overridepublic void onTabReselected(TabLayout.Tab tab) {}});}private void initLocation() {if (aMap == null) {aMap = mMapView.getMap();}aMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() {@Overridepublic void onMapLoaded() {aMap.moveCamera(CameraUpdateFactory.zoomTo(16));}});//指南针aMap.getUiSettings().setCompassEnabled(true);//显示默认的定位按钮aMap.getUiSettings().setMyLocationButtonEnabled(true);//显示实时交通状况(默认地图)aMap.setTrafficEnabled(true);//地图模式-标准地图:MAP_TYPE_NORMAL、卫星地图:MAP_TYPE_SATELLITEaMap.setMapType(AMap.MAP_TYPE_NORMAL);myLocationStyle = new MyLocationStyle();//设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。aMap.setMyLocationEnabled(true);//定位一次,且将视角移动到地图中心点。myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);//设置定位蓝点的StyleaMap.setMyLocationStyle(myLocationStyle);//动态设置权限if (isNeedCheck) {if (PermissionsUtils.checkPermissions(this, PERMISSON_REQUESTCODE, PermissionsUtils.locationPermissions)) {initaion();}} else {initaion();}}private void initaion() {//基本的定位参数mLocationOption = LocationUtils.getDefaultOption();mLocationClient = LocationUtils.initLocation(this, mLocationOption, this);//启动定位mLocationClient.startLocation();}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {if (requestCode == PERMISSON_REQUESTCODE) {if (!PermissionsUtils.verifyPermissions(grantResults)) {Tools.startAppSettings(this);isNeedCheck = false;} else {initaion();}}}@Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);if (mMapView != null) {mMapView.onSaveInstanceState(outState);}}@Overrideprotected void onRestart() {super.onRestart();//重新绘制加载地图if (mMapView != null) {mMapView.onResume();}}@Overridepublic void onPause() {super.onPause();//暂停地图的绘制if (mMapView != null) {mMapView.onPause();}}@Overridepublic void onDestroy() {super.onDestroy();if (mLocationClient != null) {//停止定位后,本地定位服务并不会被销毁mLocationClient.stopLocation();//销毁定位客户端,同时销毁本地定位服务。mLocationClient.onDestroy();}}/*** 开始默认查询附近地点*/private void seartchPoiStart(String key) {//创建搜索对象PoiSearch.Query query = new PoiSearch.Query(key, "", cityName);//设置每页最多返回多少条poiitemquery.setPageSize(30);//设置查询页码query.setPageNum(1);//构造 PoiSearch 对象,并设置监听。PoiSearch search = new PoiSearch(this, query);//设置周边搜索的中心点以及区域 5000米-5公里search.setBound(new PoiSearch.SearchBound(new LatLonPoint(latitude, longitude), 3000));search.setOnPoiSearchListener(this);//开始搜索search.searchPOIAsyn();progressDialog = new ProgressDialog(this);progressDialog.setMessage("正在查询,请稍后...");progressDialog.show();}@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (amapLocation.getErrorCode() == 0) {//停止定位后,本地定位服务并不会被销毁mLocationClient.stopLocation();//销毁定位客户端,同时销毁本地定位服务。mLocationClient.onDestroy();//更多返回看(文档:http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation)latitude = amapLocation.getLatitude();//获取纬度longitude = amapLocation.getLongitude();//获取经度cityName = amapLocation.getCity();//城市信息//定位成功在请求附近point  默认餐厅seartchPoiStart(DINING_ROOM);} else {//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。String str = amapLocation.getErrorInfo();String[] split = str.split(" ");//截取第一个空格之前的错误日志Toast.makeText(this, "定位失败," + split[0], Toast.LENGTH_LONG).show();mLocationClient.stopLocation();mLocationClient.onDestroy();}}@Overridepublic void onPoiSearched(final PoiResult poiResult, int i) {if (progressDialog != null) {progressDialog.dismiss();}//1000为成功,其他失败http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/if (i == 1000) {if (poiResult.getPois().size() > 0) {adapter = new MyAdapter(this, poiResult.getPois());listView.setAdapter(adapter);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {//根据当前选中的postion 设置高亮adapter.setSelectedPosition(position);adapter.notifyDataSetInvalidated();//设置点击的标记setMarkerOptions(poiResult.getPois().get(position).getTitle(), poiResult.getPois().get(position).getDistance(), poiResult.getPois().get(position).getLatLonPoint().getLatitude(), poiResult.getPois().get(position).getLatLonPoint().getLongitude());}});} else {Toast.makeText(this, "暂无结果", Toast.LENGTH_LONG).show();}} else {Toast.makeText(this, "搜索失败", Toast.LENGTH_LONG).show();}}@Overridepublic void onPoiItemSearched(PoiItem poiItem, int i) {}/*** 设置标记** @param name      标记的名称* @param distance  距离* @param latitude  纬度* @param longitude 经度*/private void setMarkerOptions(String name, int distance, double latitude, double longitude) {//在地图上添加一个marker,并将地图中移动至此处MarkerOptions mk = new MarkerOptions();//设置定位的图片 (默认)//本地图片BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable// .location_marker))mk.icon(BitmapDescriptorFactory.defaultMarker());//设置点击的名称mk.title(name);//点标记的内容mk.snippet("距离" + distance + "m");//点标记是否可拖拽//mk.draggable(true);//点标记的锚点mk.anchor(1.5f, 3.5f);//点的透明度//mk.alpha(0.7f);//设置marker平贴地图效果mk.setFlat(true);//设置纬度和经度LatLng ll = new LatLng(latitude, longitude);mk.position(ll);//清除所有marker等,保留自身aMap.clear(true);CameraUpdate cu = CameraUpdateFactory.newLatLng(ll);aMap.animateCamera(cu);aMap.addMarker(mk);}
}

2.2.这里用了封装的万能适配器,也可以继承BaseAdapter以前博文也写过

import android.content.Context;
import android.graphics.Color;
import android.widget.TextView;
import com.amap.api.services.core.PoiItem;
import com.helloworld.demo.R;
import com.helloworld.demo.adapter.commonlist.CommonAdapter;
import com.helloworld.demo.adapter.commonlist.ViewHolder;
import com.helloworld.demo.util.Tools;
import java.util.List;public class MyAdapter extends CommonAdapter<PoiItem> {private int selectedPosition = -1;public MyAdapter(Context context, List<PoiItem> datas) {super(context, R.layout.adapter_item, datas);}public void setSelectedPosition(int position) {selectedPosition = position;}@Overrideprotected void convert(ViewHolder holder, PoiItem poiItem, int position) {//名称String name = poiItem.getTitle();TextView locationName = holder.getView(R.id.location_name);locationName.setText(Tools.isEmpty(name) ? "-" : name);//距离int distance = poiItem.getDistance();//街道String snippet = poiItem.getSnippet();TextView locationInfo = holder.getView(R.id.location_info);locationInfo.setText(distance + "m | " + snippet);if (selectedPosition == position) {locationName.setTextColor(Color.parseColor("#1296db"));locationInfo.setTextColor(Color.parseColor("#1296db"));} else {locationName.setTextColor(Color.parseColor("#444444"));locationInfo.setTextColor(Color.parseColor("#999999"));}}
}

2.3.MapDemoActivity对应的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#fff"android:orientation="vertical"><com.amap.api.maps.MapView
        android:id="@+id/map"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="4.5"/><android.support.design.widget.TabLayout
        android:id="@+id/tablayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"android:background="#f1f1f1"app:layout_collapseMode="pin"app:tabIndicatorColor="@color/colorAccent"app:tabIndicatorHeight="2dp"app:tabMode="scrollable"app:tabPadding="5dp"app:tabSelectedTextColor="@color/colorAccent"app:tabTextColor="#444444"/><ListView
        android:id="@+id/listview"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="6.5"android:divider="#c9c9c9"android:dividerHeight="1dp"/></LinearLayout>

2.4.MyAdapter对应的布局文件

<?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="wrap_content"android:gravity="center_vertical"android:orientation="horizontal"android:padding="10dp"><LinearLayout
        android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginRight="15dp"android:layout_weight="8.2"android:orientation="vertical"><TextView
            android:id="@+id/location_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ellipsize="end"android:maxLines="1"android:text="-"android:textColor="#444444"android:textSize="15sp"/><TextView
            android:id="@+id/location_info"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="-"android:textColor="#999999"android:textSize="12sp"/></LinearLayout><ImageView
        android:id="@+id/location_image"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="10dp"/></LinearLayout>

3.交流群:392556366

安卓高德地图 - (附近信息点Poi与标记Marker2)相关推荐

  1. android 高德地图 lbstraceclient,安卓高德地图定位篇-(1)

    安卓高德地图定位.先看效果图: STEP1: 先去高德开放平台注册账号,这个不用多说吧 网址:https://lbs.amap.com/ 之后再去控制台-应用管理找到自己的key,如下图所示 STEP ...

  2. 高德地图-搜索服务-POI搜索

    高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...

  3. android高德地图设置经纬度,安卓高德地图开发自定义线路规划(按着自己定义的经纬度规划线路)...

    [实例简介] 自定义地图的线路规划问题,代码可以直接的借用,方便大家学习 [实例截图] [核心代码] (YN)安卓高德地图自定义线路规划(按着指定的经纬度规划线路) └── YnGaoDeThreeM ...

  4. 高德地图自定义图标的点标记Marker--初体验(二)

    点标记Marker 创建一个默认图标的点标记: 创建一个自定义图标的点标记: new AMap.Marker({}) 参数说明 本文以Marker为主,其他点标记方法大差不差 通过上两篇文章我们已经了 ...

  5. 高德地图-删除多个点标记

    1.问题背景 高德地图上有自己创建的marker,单击删除按钮,可以删除多个标记 2.实现源码 <!DOCTYPE html> <html><head><me ...

  6. android高德地图绘制多边形_Android安卓高德地图实现多边形绘制与编辑

    需求:使用高德地图api实现多边形的绘制与编辑,从而实现圈中房屋的效果. 在js中有相关插件,效果很好.点我跳转 但是在高德开放平台中并未找到安卓ios的相关插件或者方法,于是提交工单,5个工作日才能 ...

  7. 安卓高德地图实时定位方法的封装

    安卓地图的开发对于一个没有地图开发经验的人来说还是有点摸不着头脑的,我刚开始的时候就走了很多弯路,现在将自己实现的方法分享出来,供大家参考: 首先要去到高德地图的开方平台申请key值:点击打开链接 然 ...

  8. 百度地图、高德地图都用POI吸引你,不过它到底是什么?

    原文地址:http://www.leiphone.com/news/201612/u8F791BLvlIENtZa.html 对于地图产品而言,某个地理位置周边的信息,称之为 POI .本文作者将简单 ...

  9. android高德地图黑色,关于安卓高德地图的手机黑屏花屏模糊等症状处理

    安卓高德用户在打开加载地图的webview时候,打开方式为: var newCarrental = plus.webview.getWebviewById("加载webview页面" ...

最新文章

  1. AOSuite V2.7 发布,JavaEE快速开发平台
  2. UDP千兆以太网FPGA_verilog实现(五、以太网帧的结构)
  3. 【新星计划】MATLAB绘制图形
  4. 中科院院士:很多人没有真正理解科学研究的本质
  5. Java基础---认识正则表达式
  6. phpquery类php,phpquery 最基础的例子
  7. 圆你导演梦:5款主流视频制作软件横评
  8. nginx配置解决跨域问题
  9. input层级高 小程序_解决微信小程序input、textarea层级过高穿透问题
  10. 云服务器安装Linux桌面,centos 云服务器有桌面吗 如何进行安装
  11. linux tac文件最后五行,tac命令以及各种linux文件查看命令
  12. 办公室计算机打印机共享,如何将办公室的所有电脑共享一个打印机???
  13. html飞机翼布局,基础知识 | 飞机客舱布局及主要设施介绍
  14. 如何使用 Python 读写 PDF 文件
  15. 初学订单-支付流程(思路)
  16. 函数的返回值——数组返回
  17. 23个带给你灵感的英文字体Logo设计欣赏
  18. 宏的录制——制作工资表
  19. python url中文转码_python实现中文转换url编码的方法
  20. mui.plusReady()方法不执行

热门文章

  1. 《被讨厌的勇气》整理
  2. python模块化导入
  3. 泛微某oa系统ssrf漏洞分析
  4. Web前端学习笔记(五)--- 手风琴菜单
  5. 【技巧分享】【数据分析】数据分析模型
  6. 只懂python一门编程语言的人,可以做计算机视觉工程师吗?
  7. 神舟战神K660E(D)-I7(D8)(战斗版)(tn15s)拆机清灰教程
  8. 百度收购快钱?消息人士说不大可能
  9. Java Server Faces_用JavaServer Faces开发Web应用(4) (转)
  10. rk3128 debian9 如何配置recover键(长按开机进入loader模式)