最新基于高德地图的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
原创粉丝点击