ArcGIS for Android示例解析之地图旋转-----MapRotation

来源:互联网 发布:淘宝客服的专业术语 编辑:程序博客网 时间:2024/04/27 18:40
 

MapRotation

添加地图控件,并且为地图容器中添加地图服务上面已经介绍完了,下面我们来个复杂一点的,这个例子主要实现了地图的旋转功能,下面来看一下应用的布局文件main.xml,内容如下:

<com.esri.android.map.MapView

     xmlns:android="http://schemas.android.com/apk/res/android"

     android:id="@+id/map" android:layout_width="fill_parent"

     android:layout_height="fill_parent"

     initExtent="-1.3296373526814876E7 3930962.41823043 -1.2807176545789773E7 4201243.7502468005"/>

     <ImageButton

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:id="@+id/test"

     android:background="@drawable/picture"

     >

布局文件中添加了一个地图的‘MapView’控件和一个图片按钮,“MapView”控件用来添加地图服务,而图片按钮控件是用来显示一个图片。

下面我们来看一下MapRotation.java文件中的代码:

setContentView(R.layout.main);

           map = (MapView) findViewById(R.id.map);

     

           ArcGISTiledMapServiceLayer url=new ArcGISTiledMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer");//定义一个切片服务

           map.addLayer(url);//添加切面服务到map中

           //设置地图可以旋转,通过设置这个属性我们就可以对地图进行旋转操作了

map.setAllowRotationByPinch(true);

          

           compass = new Compass(this,null);//定义的指北针旋转算法

           map.addView(compass);//添加指北针到map中

           test = (ImageButton)findViewById(R.id.test);

从上面的代码中可以看出想要实现地图可以旋转,非常简单,只需要设置

map.setAllowRotationByPinch(true); 为真即可,而下面的代码中定义了再地图旋转时的一些事件监听及其处理操作,如下:     

//添加点击一下地图控件时监听的事件及其处理操作

map.setOnSingleTapListener(new OnSingleTapListener() {

                

                 private static final long serialVersionUID = 1L;

 

                 @Override

                 public void onSingleTap(float x,float y) {

                      //设置map的旋转角度为0

                      map.setRotationAngle(0);

                 //设置指北针的角度

                      compass.setRotationAngle(map.getRotationAngle());                       //重新绘制指北针

                      compass.postInvalidate();

                     

                     

                 }

           });

          

     //给map添加一个两手指捏及其旋转的事件监听及其处理操作

           map.setOnPinchListener(new OnPinchListener() {

     

                 private static final long serialVersionUID = 1L;

 

                 @Override

                 public void prePointersUp(float arg0,float arg1,float arg2,float arg3,

                            double arg4) {

                      //获取地图的当前地图旋转角度

                      map.getRotationAngle();    

                 //设置指北针的角度              

                      compass.setRotationAngle(map.getRotationAngle());                        //重新绘制指北针

                      compass.postInvalidate();

                     

                 }

                

                 @Override

                 public void prePointersMove(float arg0,float arg1,float arg2,float arg3,

                            double arg4) {

                      // TODO Auto-generated method stub

                     

                 }

                

                 @Override

                 public void prePointersDown(float arg0,float arg1,float arg2,float arg3,

                            double arg4) {

                      // TODO Auto-generated method stub

                     

                 }

                

                 @Override

                 public void postPointersUp(float arg0,float arg1,float arg2,float arg3,

                            double arg4) {

                      // TODO Auto-generated method stub

                     

                 }

                

                 @Override

                 public void postPointersMove(float arg0,float arg1,float arg2,

                            float arg3, double arg4) {

                      // TODO Auto-generated method stub

                     

                 }

                

                 @Override

                 public void postPointersDown(float arg0,float arg1,float arg2,

                            float arg3, double arg4) {

                      // TODO Auto-generated method stub

                     

                 }

           });

在上面的代码中可以看到,我们给map添加了两个事件监听:一个是点击一下地图控件恢复地图的旋转角度为0,并且改变指北针的角度通过map的旋转角度来计算,另一个监听操作为通过两根手指来旋转地图来改变指北针的角度,这个事件监听类重写了6个方法,我们可以写一些其他的操作在这些重写的方法中。

到此Map_View中的例子已经介绍完毕,在例子中的都是一些基本的操作没有什么过于复杂的,稍后的例子中将深入了解ArcGIS for Android的大千世界。