• arcgis for android 学习 (4) 了解mapView的一些方法和事件


     我写了一个示例,用于展示了几个方法和事件的使用。直接在在代码里写了注释,那么直接贴代码。

     

    ---------- 

    布局:

     <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/btnZoomOut"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="缩小" />

            <Button
                android:id="@+id/btn1ZoomIn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="放大" />

            <Button
                android:id="@+id/btnLookExtent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="看范围" />

            <Button
                android:id="@+id/btnToPoint"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="坐标变换" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/btnLookCenter"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="看中点坐标" />

            <Button
                android:id="@+id/btnSetCenter"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="设中点坐标为上次单击点" />
        </LinearLayout>

        <!-- MapView layout and initial extent -->

        <com.esri.android.map.MapView
            android:id="@+id/map"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
        </com.esri.android.map.MapView>

    </LinearLayout>

    代码:

      package com.vir56k.arcgisDemo;


    import com.esri.android.map.MapView;
    import com.esri.android.map.event.OnLongPressListener;
    import com.esri.android.map.event.OnPanListener;
    import com.esri.android.map.event.OnPinchListener;
    import com.esri.android.map.event.OnSingleTapListener;
    import com.esri.android.map.event.OnStatusChangedListener;
    import com.esri.android.map.event.OnZoomListener;
    import com.esri.android.map.event.OnStatusChangedListener.STATUS;
    import com.esri.core.geometry.Envelope;
    import com.esri.core.geometry.Geometry;
    import com.esri.core.geometry.Point;
    import com.esri.core.geometry.Polygon;
    import com.vir56k.arcgisDemo.mapviewDetail.R;
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;

    public class mapviewDetailActivity extends Activity {
        Button m_btnZoomOut;
        Button btn1ZoomIn;
        Button btnLookCenter;
        Button btnToPoint;
        Button btnLookExtent;
        Button btnSetCenter;
        MapView mMapView;
        
        Point m_lastClickPoint;//上次单击的点
        
    // 图层服务的地址
        final String URL_STREET_COLD = "http://cache1.arcgisonline.cn/ArcGIS/rest/services/ChinaOnlineStreetCold/MapServer";

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            // 处理放大按钮的事件
            m_btnZoomOut = (Button) findViewById(R.id.btnZoomOut);
            m_btnZoomOut.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    if (mMapView.isLoaded()) {
                        mMapView.zoomout();
                    }
                }
            });

            // 处理缩小按钮的事件
            btn1ZoomIn = (Button) findViewById(R.id.btn1ZoomIn);
            btn1ZoomIn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    if (mMapView.isLoaded()) {
                        mMapView.zoomin();
                    }
                }
            });

            // 查看地图中心点坐标
            btnLookCenter = (Button) findViewById(R.id.btnLookCenter);
            btnLookCenter.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    if (mMapView.isLoaded()) {
                        /*
                         * Point getCenter() Returns the center of the MapView as an
                         * ArcGIS geometry Point.
                         
    */
                        Point p = mMapView.getCenter();
                        AlertMsg("地图中心点坐标(ArcGIS几何点)是:(%s,%s)", p.getX(), p.getY());
                    }
                }
            });

            // 查看地图范围
            btnLookExtent = (Button) findViewById(R.id.btnLookExtent);
            btnLookExtent.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    if (mMapView.isLoaded()) {
                        /*
                         * Polygon getExtent() Returns a polygon comprising of four
                         * corners of map in map coordinates.
                         
    */
                        Polygon p = mMapView.getExtent();
                        int dimension = p.getDimension();
                        Geometry.Type type = p.getType();

                        AlertMsg("查看地图范围dimension=%s,typ=%s", dimension, type.a());
                    }
                }
            });    
            
        
            // btnSetCenter
            btnSetCenter = (Button) findViewById(R.id.btnSetCenter);
            btnSetCenter.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    if (mMapView.isLoaded()) {
                        Point p = m_lastClickPoint;
                        if(p != null)
                        {
                            mMapView.centerAt(p, true);
                            AlertMsg("设定 地图中点为:  x=%s,y=%s", p.getX(),
                                    p.getY());
                        }
                    }
                }
            });

            // 坐标变换
            btnToPoint = (Button) findViewById(R.id.btnToPoint);
            btnToPoint.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    if (mMapView.isLoaded()) {
                        /*
                         * Point toMapPoint(float screenx, float screeny) A
                         * convenience method that will convert a device's screen
                         * coordinates to an ArcGIS geometry Point that has the same
                         * spatial coordinate system as the MapView's. Point
                         * toMapPoint(Point src) A convenience method that will
                         * convert a device's screen coordinates into an ArcGIS
                         * geometry Point that has the same spatial coordinate
                         * system as the MapView's. Point toScreenPoint(Point src) A
                         * convenience method that will convert an ArcGIS geometry
                         * Point from the MapView's spatial coordinate system into
                         * the device's screen coordinates.
                         
    */

                        // AlertMsg("查看地图范围dimension=%s,typ=%s",
                        
    // dimension,type.a());
                    }
                }
            });

            mMapView = (MapView) findViewById(R.id.map);
            mMapView.addLayer(new com.esri.android.map.ags.ArcGISTiledMapServiceLayer(
                    URL_STREET_COLD));

            Envelope initextext = new Envelope(12899459.4956466, 4815363.65520802,
                    13004178.2243971, 4882704.67712717);

            mMapView.setExtent(initextext);

            // 注册长按 事件
            mMapView.setOnLongPressListener(new OnLongPressListener() {

                @Override
                public void onLongPress(float x, float y) {
                    if (mMapView.isLoaded()) {
                        AlertMsg("长按 x=%s,y=%s", x, y);
                    }
                    ;

                }
            });
            // 注册单击事件
            mMapView.setOnSingleTapListener(new OnSingleTapListener() {

                @Override
                public void onSingleTap(float x, float y) {
                    /*
                     * x - the x coordinate of the single tap location in screen
                     * pixels. y - the y coordinate of the single tap location in
                     * screen pixels.
                     
    */
                    // x,y.都是屏幕像素坐标点
                    if (mMapView.isLoaded()) {
                        AlertMsg("单击,屏幕像素坐标点:  x=%s,y=%s", x, y);

                        Point mapPoint = mMapView.toMapPoint(new Point(x, y));
                        AlertMsg("单击,地图坐标点:  x=%s,y=%s", mapPoint.getX(),
                                mapPoint.getY());
                        
                        m_lastClickPoint = mapPoint;
                        AlertMsg("设定 上次单击的点为:  x=%s,y=%s", mapPoint.getX(),
                                mapPoint.getY());
                    }
                    ;
                }
            });
            mMapView.setOnPanListener(new OnPanListener() {

                @Override
                public void prePointerUp(float fromx, float fromy, float tox,
                        float toy) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void prePointerMove(float fromx, float fromy, float tox,
                        float toy) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void postPointerUp(float fromx, float fromy, float tox,
                        float toy) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void postPointerMove(float fromx, float fromy, float tox,
                        float toy) {
                    // TODO Auto-generated method stub

                }
            });

            mMapView.setOnPinchListener(new OnPinchListener() {

                @Override
                public void prePointersUp(float x1, float y1, float x2, float y2,
                        double factor) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void prePointersMove(float x1, float y1, float x2, float y2,
                        double factor) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void prePointersDown(float x1, float y1, float x2, float y2,
                        double factor) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void postPointersUp(float x1, float y1, float x2, float y2,
                        double factor) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void postPointersMove(float x1, float y1, float x2,
                        float y2, double factor) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void postPointersDown(float x1, float y1, float x2,
                        float y2, double factor) {
                    // TODO Auto-generated method stub

                }
            });

            // 当mapView的状态改变时
            mMapView.setOnStatusChangedListener(new OnStatusChangedListener() {

                @Override
                public void onStatusChanged(Object source, STATUS status) {
                    if (status.equals(STATUS.INITIALIZATION_FAILED)) {
                        AlertMsg("mapView的状态改变时:%s", "初始化失败");
                    }
                    ;

                    if (status.equals(STATUS.INITIALIZED)) {
                        AlertMsg("mapView的状态改变时:%s", "初始化完成");
                    }
                    ;
                    if (status.equals(STATUS.LAYER_LOADED)) {
                        AlertMsg("mapView的状态改变时:%s", "图层加载完成");
                    }
                    ;

                    if (status.equals(STATUS.LAYER_LOADING_FAILED)) {
                        AlertMsg("mapView的状态改变时:%s", "图层加载失败");
                    }
                    ;
                }
            });

            // 当缩放时
            mMapView.setOnZoomListener(new OnZoomListener() {

                @Override
                public void preAction(float pivotX, float pivotY, double factor) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void postAction(float pivotX, float pivotY, double factor) {
                    AlertMsg("缩放状态变化,factor=:%s", factor);
                }
            });
        }

        private void AlertMsg(String str, Object... arg) {
            String msg = String.format(str, arg);
            Toast.makeText(this, msg,2).show();
            Log.i("AlertMsg", msg);
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
        }

        @Override
        protected void onPause() {
            super.onPause();
            mMapView.pause();
        }

        @Override
        protected void onResume() {
            super.onResume();
            mMapView.unpause();
        }
    }

    代码下载

  • 相关阅读:
    [转载]美国名校的与机器视觉相关的研发中心网址
    图像匹配方法浅谈
    Debug FFMpeg with CodeBlock
    zircobrowser 源代码学习 一个Android平台的浏览器,适合用在学UI
    iPhone addSubview sameview 是否会产生内存泄漏
    Android 游戏demo
    C# 多线程 注意问题 总结
    Builld with gloox
    论坛专用
    VMware vSphere Client(4.1/5.0/5.1/5.5/6.0) 客户端下载地址
  • 原文地址:https://www.cnblogs.com/vir56k/p/2534418.html
Copyright © 2020-2023  润新知