最新基于高德地图的android进阶开发(5)地图的基本操作、事件监听、用户UI、图层选择等
来源:互联网 发布:cf淘宝刷枪是真的吗 编辑:程序博客网 时间:2024/05/17 04:27
1.高德地图的基本操作:最简单的莫过于第一次加载地图
布局文件:basic_map.xml,在下面的操作中,未作特别说明都采用此布局文件。
<?xml version="1.0" encoding="utf-8"?><com.amap.api.maps.MapView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" ></com.amap.api.maps.MapView>
基本操作:第一次加载地图。
package com.dragon.arnav.basicFuction.basic;import android.app.Activity;import android.os.Bundle;import com.amap.api.maps.AMap;import com.amap.api.maps.MapView;import com.dragon.arnav.R;/** * This file created by dragon on 2016/7/28 21:26,belong to com.dragon.arnav.basicFuction.basic . */public class basicMap extends Activity { private MapView mapView; private AMap aMap; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);//采用这种方式或是下面注视的动态加载都是可以的 setContentView(R.layout.basic_map); mapView = (MapView) findViewById(R.id.map);// mapView = new MapView(this);// setContentView(mapView); mapView.onCreate(savedInstanceState); init(); } private void init(){ if(aMap == null){ aMap = mapView.getMap(); } } @Override protected void onResume(){ super.onResume(); mapView.onResume(); } @Override protected void onPause() { super.onPause(); mapView.onPause(); } @Override protected void onDestroy(){ super.onDestroy(); mapView.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); }}
2.camera视图实战,包括移动、动画视图、停止等,来自官方的demo
布局文件:
<?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="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/stop_animation" android:layout_width="40dip" android:layout_height="40dip" android:text="@string/stop_animation" /> <ToggleButton android:id="@+id/animate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:textOff="@string/animate" android:textOn="@string/animate" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <Button android:id="@+id/Lujiazui" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/go_to_lujiazui" /> <Button android:id="@+id/Zhongguancun" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/go_to_zhongguancun" /> </LinearLayout> <RelativeLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_horizontal" > <Button android:id="@+id/scroll_left" android:layout_width="40dip" android:layout_height="40dip" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:text="@string/left_arrow" /> <Button android:id="@+id/scroll_up" android:layout_width="40dip" android:layout_height="40dip" android:layout_alignParentTop="true" android:layout_toRightOf="@id/scroll_left" android:text="@string/up_arrow" /> <Button android:id="@+id/scroll_down" android:layout_width="40dip" android:layout_height="40dip" android:layout_below="@id/scroll_up" android:layout_toRightOf="@id/scroll_left" android:text="@string/down_arrow" /> <Button android:id="@+id/scroll_right" android:layout_width="40dip" android:layout_height="40dip" android:layout_centerVertical="true" android:layout_toRightOf="@id/scroll_down" android:text="@string/right_arrow" /> </RelativeLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="right" android:orientation="vertical" > <Button android:id="@+id/zoom_in" android:layout_width="40dip" android:layout_height="40dip" android:text="@string/zoom_in" /> <Button android:id="@+id/zoom_out" android:layout_width="40dip" android:layout_height="40dip" android:text="@string/zoom_out" /> </LinearLayout> </LinearLayout> <com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
核心代码:
package com.dragon.arnav.basicFuction.basic;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.CompoundButton;import android.widget.ToggleButton;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.CameraPosition;import com.amap.api.maps.model.MarkerOptions;import com.dragon.arnav.R;import com.dragon.arnav.basicFuction.util.Constants;import com.dragon.arnav.basicFuction.util.ToastUtil;/** * This file created by dragon on 2016/7/28 21:26,belong to com.dragon.arnav.basicFuction.basic . */public class basicMap extends Activity implements View.OnClickListener,AMap.CancelableCallback { private MapView mapView; private AMap aMap;// 上下左右一次的移动像素点 private static final int SCROLL_BY_PX = 100; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.basic_map); mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState); init(); } private void init(){ if(aMap == null){ aMap = mapView.getMap(); }// 各种事件的监听方式 Button stopAnimation = (Button)findViewById(R.id.stop_animation); stopAnimation.setOnClickListener(this); ToggleButton animate = (ToggleButton)findViewById(R.id.animate); animate.setOnClickListener(this); Button Lujiazui = (Button) findViewById(R.id.Lujiazui); Lujiazui.setOnClickListener(this); Button Zhongguancun = (Button) findViewById(R.id.Zhongguancun); Zhongguancun.setOnClickListener(this); Button scrollLeft = (Button)findViewById(R.id.scroll_left); scrollLeft.setOnClickListener(this); Button scrollRight = (Button)findViewById(R.id.scroll_right); scrollRight.setOnClickListener(this); Button scrollUp = (Button)findViewById(R.id.scroll_up); scrollUp.setOnClickListener(this); Button scrollDown = (Button) findViewById(R.id.scroll_down); scrollDown.setOnClickListener(this); Button zoomIn = (Button) findViewById(R.id.zoom_in); zoomIn.setOnClickListener(this); Button zoomOut = (Button)findViewById(R.id.zoom_out); zoomOut.setOnClickListener(this); } @Override protected void onResume(){ super.onResume(); mapView.onResume(); } @Override protected void onPause() { super.onPause(); mapView.onPause(); } @Override protected void onDestroy(){ super.onDestroy(); mapView.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); }// 根据动画按钮的状态来选择不同的camera来改变可视区域// AMap.CanclelableCallback:当一个任务完成或关闭时的回调接口。 private void changeCamera(CameraUpdate update, AMap.CancelableCallback callback){ boolean animated = ((CompoundButton)findViewById(R.id.animate)).isChecked(); if(animated){//在指定的持续时间内,动画地移动地图到指定的位置,完成时调用可选的回调方法。 如果运动过程中调用getCameraPosition(),它将返回可视区域飞行中的当前位置。// 第一个参数:定义转换的时间,第二个参数:运动的持续时间,第三个参数:回调函数 aMap.animateCamera(update,1000,callback); }else{// 照传入的CameraUpdate 参数移动可视区域。这个方法为瞬间移动,没有移动过程,如果在调用此方法后再调用getCameraPosition()将返回移动后位置。 aMap.moveCamera(update); } } @Override public void onClick(View v){ switch(v.getId()){ /** * 点击停止动画按钮响应事件 */ case R.id.stop_animation: aMap.stopAnimation(); break; /** * 点击“去中关村”按钮响应事件 */ case R.id.Zhongguancun: changeCamera( CameraUpdateFactory.newCameraPosition(new CameraPosition( Constants.ZHONGGUANCUN, 18, 0, 30)), null); break; /** * 点击“去陆家嘴”按钮响应事件 */ case R.id.Lujiazui: changeCamera( CameraUpdateFactory.newCameraPosition(new CameraPosition( Constants.SHANGHAI, 18, 30, 0)), this); break; /** * 点击向左移动按钮响应事件,camera将向左边移动 */ case R.id.scroll_left: changeCamera(CameraUpdateFactory.scrollBy(-SCROLL_BY_PX, 0), null); break; /** * 点击向右移动按钮响应事件,camera将向右边移动 */ case R.id.scroll_right: changeCamera(CameraUpdateFactory.scrollBy(SCROLL_BY_PX, 0), null); break; /** * 点击向上移动按钮响应事件,camera将向上边移动 */ case R.id.scroll_up: changeCamera(CameraUpdateFactory.scrollBy(0, -SCROLL_BY_PX), null); break; /** * 点击向下移动按钮响应事件,camera将向下边移动 */ case R.id.scroll_down: changeCamera(CameraUpdateFactory.scrollBy(0, SCROLL_BY_PX), null); break; /** * 点击地图放大按钮响应事件 */ case R.id.zoom_in: changeCamera(CameraUpdateFactory.zoomIn(), null); break; /** * 点击地图缩小按钮响应事件 */ case R.id.zoom_out: changeCamera(CameraUpdateFactory.zoomOut(), null); break; default: break; } } /** * 地图动画效果终止回调方法 */ @Override public void onCancel() { ToastUtil.show(basicMap.this, "Animation to 陆家嘴 canceled"); } /** * 地图动画效果完成回调方法 */ @Override public void onFinish() { ToastUtil.show(basicMap.this, "Animation to 陆家嘴 complete"); }}
效果图
3.事件监听,主要包括单击,长按,触摸等事件
布局文件
<?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="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tap_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/tap_instructions" /> <TextView android:id="@+id/camera_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/move_the_camera" /> <TextView android:id="@+id/touch_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/touch_the_map" /> <com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
核心代码(来自官方demo)
package com.amap.map3d.demo.basic;import android.app.Activity;import android.os.Bundle;import android.view.MotionEvent;import android.widget.TextView;import com.amap.api.maps.AMap;import com.amap.api.maps.AMap.OnCameraChangeListener;import com.amap.api.maps.AMap.OnMapClickListener;import com.amap.api.maps.AMap.OnMapLongClickListener;import com.amap.api.maps.AMap.OnMapTouchListener;import com.amap.api.maps.MapView;import com.amap.api.maps.model.CameraPosition;import com.amap.api.maps.model.LatLng;import com.amap.api.maps.model.LatLngBounds;import com.amap.api.maps.model.VisibleRegion;import com.amap.map3d.demo.util.Constants;import com.amap.map3d.demo.util.ToastUtil;import com.amap.map3d.demo.R;/** * AMapV2地图中简单介绍OnMapClickListener, OnMapLongClickListener, * OnCameraChangeListener三种监听器用法 */public class EventsActivity extends Activity implements OnMapClickListener, OnMapLongClickListener, OnCameraChangeListener, OnMapTouchListener { private AMap aMap; private MapView mapView; private TextView mTapTextView; private TextView mCameraTextView; private TextView mTouchTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.events_activity); mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState);// 此方法必须重写 init(); } /** * 初始化AMap对象 */ private void init() { if (aMap == null) { aMap = mapView.getMap(); setUpMap(); } mTapTextView = (TextView) findViewById(R.id.tap_text); mCameraTextView = (TextView) findViewById(R.id.camera_text); mTouchTextView = (TextView) findViewById(R.id.touch_text); } /** * amap添加一些事件监听器 */ private void setUpMap() { aMap.setOnMapClickListener(this);// 对amap添加单击地图事件监听器 aMap.setOnMapLongClickListener(this);// 对amap添加长按地图事件监听器 aMap.setOnCameraChangeListener(this);// 对amap添加移动地图事件监听器 aMap.setOnMapTouchListener(this);// 对amap添加触摸地图事件监听器 } /** * 方法必须重写 */ @Override protected void onResume() { super.onResume(); mapView.onResume(); } /** * 方法必须重写 */ @Override protected void onPause() { super.onPause(); mapView.onPause(); } /** * 方法必须重写 */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } /** * 方法必须重写 */ @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); } /** * 对单击地图事件回调 */ @Override public void onMapClick(LatLng point) { mTapTextView.setText("tapped, point=" + point); } /** * 对长按地图事件回调 */ @Override public void onMapLongClick(LatLng point) { mTapTextView.setText("long pressed, point=" + point); } /** * 对正在移动地图事件回调 */ @Override public void onCameraChange(CameraPosition cameraPosition) { mCameraTextView.setText("onCameraChange:" + cameraPosition.toString()); } /** * 对移动地图结束事件回调 */ @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { mCameraTextView.setText("onCameraChangeFinish:" + cameraPosition.toString()); VisibleRegion visibleRegion = aMap.getProjection().getVisibleRegion(); // 获取可视区域、 LatLngBounds latLngBounds = visibleRegion.latLngBounds;// 获取可视区域的Bounds boolean isContain = latLngBounds.contains(Constants.SHANGHAI);// 判断上海经纬度是否包括在当前地图可见区域 if (isContain) { ToastUtil.show(EventsActivity.this, "上海市在地图当前可见区域内"); } else { ToastUtil.show(EventsActivity.this, "上海市超出地图当前可见区域"); } } /** * 对触摸地图事件回调 */ @Override public void onTouch(MotionEvent event) { mTouchTextView.setText("触摸事件:屏幕位置" + event.getX() + " " + event.getY()); }}
2 0
- 最新基于高德地图的android进阶开发(5)地图的基本操作、事件监听、用户UI、图层选择等
- 最新基于高德地图的android进阶开发(3)GPS地图定位
- 最新基于高德地图的android进阶开发 GPS地图定位
- 最新基于高德地图的android进阶开发(1)获取 Map API Key
- 最新基于高德地图的android进阶开发(2)小试牛刀
- 最新基于高德地图的android进阶开发(6)感兴趣点(POI)周边搜索源码浅析
- 基于高德地图开发--创建基本的地图
- 最新基于高德地图的android进阶开发(4)GPS定位之POI(Point of interesting)兴趣点源码简介
- 基于高德地图的描点操作,监听地图缩放,展示合理数量的marker
- Android高德地图开发 地图事件
- 高德地图的基本操作
- 基于高德地图的应用开发-----DIY地图
- Android 高德地图,显示最基本的地图
- 高德地图叠加google的地图图层
- Android简单实现 高德地图的定位与显示,点击按钮切换地图图层
- Android Studio 关于高德地图的开发:显示地图
- Android 高德地图的开发
- 高德地图开发--地图的显示
- 线程特定数据
- 使用GAMS的gdxxrw命令读写Excel时Cdim和Rdim的意义及设置
- [HDU5764] After a Sleepless Night [2016 Multi-University Training Contest 4(2016多校联合训练4) B]
- Android进程间通信(IPC)机制Binder简要介绍和学习计划
- pptpd vpn服务器搭建记录
- 最新基于高德地图的android进阶开发(5)地图的基本操作、事件监听、用户UI、图层选择等
- Day 1 复习Linux指令,利用for循环打印菱形
- 使用CXF框架,发布webservice服务,并使用客户端远程访问webservice
- ServletJsp之登录界面
- SQL Server
- [16-7-28]每日总结
- 集合继承结构
- 63. Unique Paths II
- 解析XML文件之使用DOM解析器