안드로이드 MapView 심화

| 댓글 없음 | 트랙백 없음

안드로이드 맵뷰 심화

지난번에 MapActivity 를 통하여 지도 Application을 에뮬레이터에서 실행하였다(안드로이드 MapView API 사용해 보기). 이제 여기에 다양한 기능을 추가해 보겠다.

 

위성 지도 보이기

MapActivity에서 MapView 객체 가져오기

MapActivity 소스코드 내에서 findViewById 메서드를 이용하여 MapView객체의 레퍼런스를 찾아오기 위하여 android:id 속성을 추가한다.

변경할 파일은 <PROJECT>/res/layout/main.xml이다.

  1. <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <com.google.android.maps.MapView
            android:id="@+id/testMapView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:enabled="true"
            android:clickable="true"
            android:apiKey="03d0eYuU20SMHZARFYNbqBRkKERXqVPMMieAk8g"
            />

    </LinearLayout>

 

<PROJECT>/src/com.jjis.test/R.java 파일에 id와 관련된 속성이 inline class로 생성되었음을 알 수 있다.

그렇다면 생성된 ID를 이용해서 MapView 객체의 레퍼런스를 가져 오도록 findById 메서드를 이용해 보자. 아래와 같이 맴버 변수로 MapView 를 하나 선언하고 onCreate 메서드에 fiewViewById를 호출해서 mapView 변수에 할당하자. 여기서 View를 찾기위한 ID는 R.java의 R.id.testMapView를 이용할 수 있다.

 

  1. package com.jjis.test;

    import android.os.Bundle;

    import com.google.android.maps.MapActivity;
    import com.google.android.maps.MapView;

    public class MapTest extends MapActivity {
       
        private MapView mapView;
       
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mapView = (MapView)findViewById(R.id.testMapView);
        }

        @Override
        protected boolean isRouteDisplayed() {
            // TODO Auto-generated method stub
            return false;
        }

    }

 

MapView의 Satellite 속성 변경

이제 MapActivity에서 지도를 보여주던 MapView의 레퍼런스를 가져 왔으니 단순히 setSatellite 메서드를 이용해서 true속성만 전달해 주면 된다.

  1.     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mapView = (MapView)findViewById(R.id.testMapView);
  2.         mapView.setSatellite(true);
        }

 

이제 결과를 확인한다.

 

스크린샷-Android_Emulator_(5554)-1.png

 

유훗... 멋지다.!!

 

MapView에 기능 추가

zoom controller 추가하기

지도가 너무 작다... 자세히 보고 싶은데... zoom controller를 추가해 보자.

MapActivity를 구현한 클래스의 onCreate메서드를 다음과 같이 수정하자..


  1.     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
       mapView = (MapView)findViewById(R.id.testMapView);
       mapView.setSatellite(true);
      
       int y = 10;
       int x = 10;
      
       MapView.LayoutParams lp;
       lp = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT,
               MapView.LayoutParams.WRAP_CONTENT,
               x,y,
               MapView.LayoutParams.TOP_LEFT);
       View zoomControls = mapView.getZoomControls();
       mapView.addView(zoomControls, lp);
       mapView.displayZoomControls(true);

        }

 

 몇가지 import를 해야 하지만.. eclipse의 shift+alt+O를 사용해서 처리하기 바란다.. 다시 실행해 보면 아래와 같이 10,10의 위치에 Zoom Controller가 나타난다. 이 화면은 Zoom Controller와 마우스 드래그를 통해서 서울로 이동한 화면이다.

스크린샷-Android_Emulator_(5554)-2.png

 

원하는 장소로 이동하여 보여주기

안드로이드 어플리케이션에서 사용자의 조작이 아닌 경우에 위치 이동을 해야 할 경우가 있을것이다. 아래의 코드와 같이 MapActivity의 onCreate 메소를 수정한다.

  1.        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
       mapView = (MapView)findViewById(R.id.testMapView);
       mapView.setSatellite(true);
      
       int y = 30;
       int x = 30;
      
       MapView.LayoutParams lp;
       lp = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT,
               MapView.LayoutParams.WRAP_CONTENT,
               x,y,
               MapView.LayoutParams.TOP_LEFT);
       View zoomControls = mapView.getZoomControls();
       mapView.addView(zoomControls, lp);
       mapView.displayZoomControls(true);
     
       //이동하기
       MapController mapController = mapView.getController();
       Double lat = 37.559866*1E6;
       Double lng = 126.98287*1E6;
       GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());
       mapController.animateTo(point);
       mapController.setZoom(19);

       
        }

 

Professional Android Application Development를 참조하여 개발하고 있다. 여기서는 구글 본사가 표시되도록 경,위도를 입력하였으나.. 약간 안습이지만 우리회사 좌표로 살짝 바꾸었다. 결과는 아래와 같다.

스크린샷-Android_Emulator_(5554)-3(1).png

 

이 글은 스프링노트에서 작성되었습니다.

트랙백 없음

트랙백 주소: http://zbum.cafe24.com/MT/mt-tb.cgi/46

댓글

About This Blog Author

정지범(jibum.jung@gmail.com)

Google AdSense

Clock Link

Developers Works

Creative Commons License
This blog is licensed under a Creative Commons License.