관리 메뉴

moozi

MapView 이용하기 5 - onTab() 사용 본문

안드로이드개발강좌

MapView 이용하기 5 - onTab() 사용

moozi 2010. 2. 25. 15:39


이번 강좌는 지난 강좌 MapView 이용하기 4에서 이어집니다.

지난 강좌에서는 원하는 위치로 이동하여, 위치를 표시하는 법을 배웠습니다. 이번 강좌에서는 위치표시에 사용된 아이콘을 눌렀을 때( 이부분에서 onTab()이 사용됩니다.)  다이얼로그를 띄워보겠습니다.

1. src -> HelloItemizedOverlay.java 파일을 다음과 같이 편집합니다.

package my.HelloMyMap;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;

import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class HelloItemizedOverlay extends ItemizedOverlay {

private Context mContext;
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
 
 public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
  super(boundCenterBottom(defaultMarker));
  // TODO Auto-generated constructor stub
  mContext = context;
 }

 @Override
 protected OverlayItem createItem(int i) {
  // TODO Auto-generated method stub
  return mOverlays.get(i);
 }

 @Override
 public int size() {
  // TODO Auto-generated method stub
  return  mOverlays.size();
 }
 
 public void addOverlay(OverlayItem overlay) {
     mOverlays.add(overlay);
     populate();
 }

 @Override
 protected boolean onTap(int index) {
   OverlayItem item = mOverlays.get(index);
   AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
   dialog.setTitle(item.getTitle()); 
   dialog.setMessage(item.getSnippet());
   dialog.show();
   return true;
 }

}


코드를 대략 살펴보면,

HelloItemizedOverlay(Drawable defaultMarker, Context context)
에서 매개변수가 두개인 생성자를 사용하였습니다.

protected boolean onTap(int index) 가 추가 되었는데, 아이콘을 눌렀을때 이벤트 처리를 합니다.

AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 부분은 다이얼로그를 생성하고 있습니다.

dialog.setTitle(item.getTitle());  다이얼로그의 타이틀을 세팅합니다.
dialog.setMessage(item.getSnippet()); 다이얼로그의 메세지를 세팅합니다.


2. src - > HelloMyMap.java 파일을 다음과 같이 편집합니다.

package my.HelloMyMap;

import java.util.List;

import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.ZoomControls;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class HelloMyMap extends MapActivity {
 
 List<Overlay> mapOverlays;
 Drawable drawable;
 HelloItemizedOverlay itemizedOverlay;
 LinearLayout linearLayout;
 MapView mapView;
 ZoomControls mZoom;
   
 @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
 
/** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        mapView.setSatellite(true);
        GeoPoint p=new GeoPoint(37450877,126768494);
        MapController mc=mapView.getController();       
        mc.animateTo(p);
        mc.setZoom(5);
       
        mapOverlays = mapView.getOverlays();
        drawable = this.getResources().getDrawable(R.drawable.androidmarker);
        itemizedOverlay = new HelloItemizedOverlay(drawable,this);
       
        OverlayItem overlayitem = new OverlayItem(p, "안녕", "서울");
       
        itemizedOverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedOverlay);
    }    
   
}

코드를 보면,

OverlayItem overlayitem = new OverlayItem(p, "안녕", "서울"); 에서 두번째 매개변수 값으로 "안녕", 세번째 매개변수 값으로 "서울" 을 입력했습니다. "안녕"은 다이얼로그의 타이틀로 사용되고, "서울"은 다이얼로그의 메세지로 사용됩니다.



3. Ctrl + F11 로 실행합니다.


[ 실행결과 - 안드로이드 아이콘을 클릭하면 다이얼로그가 나타납니다. ]


 

4 Comments
  • 프로필사진 solkit 2010.03.01 05:51 안녕하세요? 강좌 잘 보고 있습니다.
    강좌 보면서 그대로 따라 해보고 또 약간 변형 시켜서도 해 보고 있습니다.
    초보적인 질문인 것 같은데요. 하다가 안 되서 질문 드립니다.

    아래 HelloAndroid.java의 onCreate()에서요.

    ImageButton(); => 이걸로 하면 실행이 되는데
    // h.ImageButton(); => 이거 주석 풀고 하면 실행이 안 되요.

    이게 왜 안 되는거죠?


    HelloAndroid.java .

    package om.example.helloandroid;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageButton;
    import android.widget.TextView;
    import android.widget.Toast;

    public class HelloAndroid extends Activity {

    public Hi h;

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

    h = new Hi();
    int j = h.answer3(3);
    if (j==3)
    {
    ImageButton();
    // h.ImageButton();
    } else {
    answer2();
    }
    }

    public void ImageButton() {
    setContentView(R.layout.imagebutton);
    final ImageButton button = (ImageButton) findViewById(R.id.android_button);
    button.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    // Perform action on clicks
    Toast.makeText(HelloAndroid.this, "Beep Bop", Toast.LENGTH_SHORT).show();
    }
    });
    }

    public void answer2() {
    setContentView(R.layout.main);
    TextView tv = new TextView(this);
    tv.setText("This is an answer2");
    setContentView(tv);

    }
    }

    Hi.java

    package om.example.helloandroid;

    import android.app.Activity;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageButton;
    import android.widget.TextView;
    import android.widget.Toast;

    public class Hi extends Activity {
    HelloAndroid Hello;
    public int answer3(int i) {
    int j = 3;
    return j;
    }

    public void ImageButton() {
    setContentView(R.layout.imagebutton);
    final ImageButton button = (ImageButton) findViewById(R.id.android_button);
    button.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    // Perform action on clicks
    Toast.makeText(Hi.this, "Beep Bop", Toast.LENGTH_SHORT).show();
    }
    });
    }
    }

    그럼....
  • 프로필사진 moozi 2010.03.01 17:55 신고 solkit님 안녕하세요?

    열심히 공부하시는 모습 보기 좋습니다.

    A라는 Activity에서 B라는 Activity를 호출할 때는 intent의 개념이 필요합니다. intent클래스를 이용해서 다른 Activity를 호출하고, 필요한 데이터도 전달하고 하거든요...

    이부분은 다음 강좌를 한번 참조해 보세요.

    http://www.androidside.com/bbs/board.php?bo_table=B46&wr_id=66&sca=&sfl=wr_subject&stx=intent&sop=and

    ^^
  • 프로필사진 solkit 2010.03.02 01:17 감사합니다.. ^^
    뭐 열심히 할 수 있는 이유는.. 지금 실업자라서.. ^^
    계속 좋은 강좌 부탁드립니다.
  • 프로필사진 후릅 2010.04.05 15:39 강좌 정말 잘 보고 있습니다
    다른게 아니고 이 강좌의 내용을 제가 만들려는 어플리케이션에 응용해보려고 하는데요
    저는 클릭했을때 저 다이얼로그가 뜨는게 아니고
    실행하자마자 떠있는 것을 원합니다
    그 뒤로는 강좌 내용처럼 단순히 클릭하면 다이얼로그가 열리는 식으로 하고 싶고요
    그러니까 강좌와 차이점은 단순히 처음에 다이얼로그가 열려있느냐 없느냐의 차이겠네요
    어떤 구문으로 이런 결과를 얻을 수 있을지요
    사실은 말풍선을 띄우고 싶었는데 이게 기본지원되는 부분이 아니라 상당히 어렵더라구요
댓글쓰기 폼