上一结主要介绍了如何继承高德地图,以及地图的几种不同的显示方式,那么本节我们接着往下看,这一节主要介绍地图的手势交互功能,其中包括滑动手势(地图是否可以滑动)、缩放手势(是否可以通过手势放大缩小地图)、切斜手势以及旋转手势,另外又加了两小部分,地图的单击、长按、触摸事件,比如点一下获取地图上点击部位的经纬度。
先看一张效果图:
下面直接上代码:
布局.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#D999"
android:padding="5dp"
android:orientation="vertical">
<CheckBox
android:id="@+id/scroll_toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="滑动手势" />
<CheckBox
android:id="@+id/zoom_gestures_toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="缩放手势" />
<CheckBox
android:id="@+id/tilt_toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="倾斜手势" />
<CheckBox
android:id="@+id/rotate_toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="旋转手势" />
<TextView
android:id="@+id/tv_click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="地图单机事件"/>
<TextView
android:id="@+id/tv_longClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="地图长按事件"/>
<TextView
android:id="@+id/tv_touch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="地图触摸事件"/>
</LinearLayout>
</RelativeLayout>
GestureSettingsActivity.java类文件
package com.junto.gdmaptest.activity;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.UiSettings;
import com.amap.api.maps.model.LatLng;
import com.junto.gdmaptest.R;
/**
* Created by WangJinyong on 2018/10/22.
* 手势选项设置响应事件
*/
public class GestureSettingsActivity extends Activity implements View.OnClickListener {
MapView mapView = null;
AMap aMap;
private UiSettings mUiSettings;
private CheckBox scroll_toggle,zoom_gestures_toggle,tilt_toggle,rotate_toggle;
private TextView tv_click,tv_longClick,tv_touch;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gesturesettings);
//获取地图控件引用
mapView = findViewById(R.id.map);
//在activity执行onCreat时执行mapView.onCreate(savedInstanceState),创建地图
mapView.onCreate(savedInstanceState);
initView();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mapView.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mapView.onSaveInstanceState(outState);
}
private void initView(){
//初始化AMap对象
if (aMap == null) {
aMap = mapView.getMap();
mUiSettings = aMap.getUiSettings();
}
scroll_toggle = findViewById(R.id.scroll_toggle);
scroll_toggle.setOnClickListener(this);
zoom_gestures_toggle = findViewById(R.id.zoom_gestures_toggle);
zoom_gestures_toggle.setOnClickListener(this);
tilt_toggle = findViewById(R.id.tilt_toggle);
tilt_toggle.setOnClickListener(this);
rotate_toggle = findViewById(R.id.rotate_toggle);
rotate_toggle.setOnClickListener(this);
tv_click = findViewById(R.id.tv_click);
tv_longClick = findViewById(R.id.tv_longClick);
tv_touch = findViewById(R.id.tv_touch);
/**
* 对单击地图事件回调
*/
aMap.setOnMapClickListener(new AMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
tv_click.setText("单机地图获取经纬度="+latLng);
}
});
/**
* 对长按地图事件回调
*/
aMap.setOnMapLongClickListener(new AMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
tv_longClick.setText("长按地图获取经纬度="+latLng);
}
});
/**
* 对移动地图结束事件回调
*/
aMap.setOnMapTouchListener(new AMap.OnMapTouchListener() {
@Override
public void onTouch(MotionEvent motionEvent) {
tv_touch.setText("触摸事件:屏幕位置" + motionEvent.getX() + "-- " + motionEvent.getY()+"\nmotionEvent.toString="+motionEvent.toString());
}
});
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.scroll_toggle://设置地图是否可以手势滑动
mUiSettings.setScrollGesturesEnabled(((CheckBox) view).isChecked());
break;
case R.id.zoom_gestures_toggle://设置地图是否可以手势缩放大小
mUiSettings.setZoomGesturesEnabled(((CheckBox) view).isChecked());
break;
case R.id.tilt_toggle://设置地图是否可以倾斜
mUiSettings.setTiltGesturesEnabled(((CheckBox) view).isChecked());
break;
case R.id.rotate_toggle://设置地图是否可以旋转
mUiSettings.setRotateGesturesEnabled(((CheckBox) view).isChecked());
break;
}
}
}
到此,地图的手势交互功能就完成了,是不很简单。
在下一节将要介绍下地图的自定义缩放及缩放动画效果。