1. 程式人生 > >ArcGIS for Android示例解析之地圖旋轉-----MapRotation

ArcGIS for Android示例解析之地圖旋轉-----MapRotation

 

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的大千世界。