(二)高德地图之手势交互

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013184970/article/details/83896780

上一结主要介绍了如何继承高德地图,以及地图的几种不同的显示方式,那么本节我们接着往下看,这一节主要介绍地图的手势交互功能,其中包括滑动手势(地图是否可以滑动)、缩放手势(是否可以通过手势放大缩小地图)、切斜手势以及旋转手势,另外又加了两小部分,地图的单击、长按、触摸事件,比如点一下获取地图上点击部位的经纬度。

先看一张效果图:

下面直接上代码:

布局.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;
        }
    }
}

到此,地图的手势交互功能就完成了,是不很简单。

在下一节将要介绍下地图的自定义缩放及缩放动画效果。

猜你喜欢

转载自blog.csdn.net/u013184970/article/details/83896780