맵 위에 그림을 그리려고 합니다
chat.java에서는 제 위치를 받아오고 웹뷰와 맵뷰로 나누어져 있고
MyPositionOverlay.java에서 draw를 하려고 하는데
지도위에 Here I am 이라는 텍스트와 동그라미는 표시가 되는데
터치로 그림은 그려지지 않습니다. 소스상에 에러는 없습니다.

일단 저 코드를 실행하면 터치가 되지 않습니다.
제 생각엔 이미 지도상에서 터치가 되고 있는데
제가 터치에 대한 함수를 구현해서 그런 것 같은데 그게 맞나요??
그게 맞다면 지도위의 터치를 disable시키는 방법이 있나요?

왜 터치 자체가 인식되지 않는지 모르겠습니다..



-chat.java

package com.Messenger;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import android.content.Context;
import android.content.Intent;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.MenuItem.OnMenuItemClickListener;
import android.webkit.WebView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

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;

public class Chat extends MapActivity {

 MapController mapController;
 MyPositionOverlay positionOverlay;

 private WebView webView;

 private static final int sMenuExampleResources[] = { R.menu.submenu_chat };
 private static final String sMenuExampleNames[] = { "Submenu2" };

 private Spinner mSpinner;
 private TextView mInstructionsText;
 private Menu mMenu;

 int flag = 0;

 @Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.chat);

  MapView myMapView = (MapView) findViewById(R.id.mapview);
  mapController = myMapView.getController();

  webView = (WebView) findViewById(R.id.web_view);
  // webView.loadUrl("211.196.78.16:8100/msg.htm");
  webView.loadUrl("http://www.naver.com");

  // Configure the map display options
  myMapView.setSatellite(true);
  myMapView.setStreetView(true);

  // Zoom in
  mapController.setZoom(17);

  // Add the MyPositionOverlay
  positionOverlay = new MyPositionOverlay();
  List<Overlay> overlays = myMapView.getOverlays();
  overlays.add(positionOverlay);

  LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

  Criteria criteria = new Criteria();
  criteria.setAccuracy(Criteria.ACCURACY_FINE);
  criteria.setAltitudeRequired(false);
  criteria.setBearingRequired(false);
  criteria.setCostAllowed(true);
  criteria.setPowerRequirement(Criteria.POWER_LOW);
  String provider = locationManager.getBestProvider(criteria, true);

  Location location = locationManager.getLastKnownLocation(provider);

  updateWithNewLocation(location);

  locationManager.requestLocationUpdates(provider, 2000, 10,
    locationListener);

  // Create a simple layout
  LinearLayout layout = new LinearLayout(this);
  layout.setOrientation(LinearLayout.VERTICAL);

  // Create the spinner to allow the user to choose a menu XML
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_spinner_item, sMenuExampleNames);
  adapter
    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  mSpinner = new Spinner(this);
  mSpinner.setAdapter(adapter);
 }

 private final LocationListener locationListener = new LocationListener() {
  public void onLocationChanged(Location location) {
   updateWithNewLocation(location);
  }

  public void onProviderDisabled(String provider) {
   updateWithNewLocation(null);
  }

  public void onProviderEnabled(String provider) {
  }

  public void onStatusChanged(String provider, int status, Bundle extras) {
  }
 };

 /** Update the map with a new location */
 private void updateWithNewLocation(Location location) {
  // TextView myLocationText = (TextView)
  // findViewById(R.id.myLocationText);

  // String latLongString;
  // String addressString = "No address found";

  if (location != null) {
   // Update my location marker
   positionOverlay.setLocation(location);

   // Update the map location.
   Double geoLat = location.getLatitude() * 1E6;
   Double geoLng = location.getLongitude() * 1E6;
   GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());

   mapController.animateTo(point);

   double lat = location.getLatitude();
   double lng = location.getLongitude();
   // latLongString = "Lat:" + lat + "\nLong:" + lng;

   Geocoder gc = new Geocoder(this, Locale.getDefault());
   try {
    List<Address> addresses = gc.getFromLocation(lat, lng, 1);
    StringBuilder sb = new StringBuilder();
    if (addresses.size() > 0) {
     Address address = addresses.get(0);

     for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
      sb.append(address.getAddressLine(i)).append("\n");

     sb.append(address.getLocality()).append("\n");
     sb.append(address.getPostalCode()).append("\n");
     sb.append(address.getCountryName());
    }
    // addressString = sb.toString();
   } catch (IOException e) {
   }
  } else {
   // latLongString = "No location found";
  }
  // myLocationText.setText("Your Current Position is:\n" + latLongString
  // + "\n" + addressString);
 }

 @Override
 protected boolean isRouteDisplayed() {
  return false;
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Hold on to this
  mMenu = menu;

  // Inflate the currently selected menu XML resource.
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(sMenuExampleResources[mSpinner
    .getSelectedItemPosition()], menu);

  // Disable the spinner since we've already created the menu and the user
  // can no longer pick a different menu XML.
  mSpinner.setEnabled(false);

  // Change instructions
  return true;
 }
/*
 public void onCreateContextMenu(ContextMenu menu, View v,
   ContextMenu.ContextMenuInfo menuInfo) {

  MenuItem draw = mMenu.add(R.id.draw);
  draw.setOnMenuItemClickListener(new OnMenuItemClickListener() {
   public boolean onMenuItemClick(MenuItem item) {
     flag = 1;
     
     return true;
   }
  });
  
  if(flag == 1)
   startActivity(new Intent(this, Draw.class));
 }
*/
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {

  case R.id.list:
   startActivity(new Intent(this, List.class));
   return true;
  case R.id.map1:
   startActivity(new Intent(this, Map1.class));
   return true;

  case R.id.map2:
   startActivity(new Intent(this, map2.class));
   return true;

  case R.id.chat:
   startActivity(new Intent(this, Chat.class));
   return true;

  case R.id.draw:
  // if(flag == 1)
    startActivity(new Intent(this, Draw.class));
   return true;
   
  default:
   // Don't toast text when a submenu2 is clicked
   if (!item.hasSubMenu()) {
    Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT)
      .show();
    return true;
   }
   break;
  }

  return false;
 }
}


- MyPostionOverlay.java

package com.Messenger;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.RectF;
import android.location.Location;
import android.view.MotionEvent;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;

public class MyPositionOverlay extends Overlay {

 Location location;

 private final int mRadius = 5;
 
 private float mX, mY;
 private static final float TOUCH_TOLERANCE = 4;
 
 private Bitmap mBitmap;
 private Canvas mCanvas;
 private Path mPath;
 private Paint mBitmapPaint;
 private Bitmap src;
 private Paint mPaint;

 /** Get the position location */
 public Location getLocation() {
  return location;
 }

 /** Set the position location */
 public void setLocation(Location location) {
  this.location = location;
 }

 private void touch_start(float x, float y) {
 // System.out.println("onClick");

  mPath.reset();
  mPath.moveTo(x, y);
  mX = x;
  mY = y;
 }

 private void touch_move(float x, float y) {
  System.out.println("onClick");

  float dx = Math.abs(x - mX);
  float dy = Math.abs(y - mY);
  if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
   mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
   mX = x;
   mY = y;
  }
 }
 
 @Override
 public void draw(Canvas canvas, MapView mapView, boolean shadow) {
  Projection projection = mapView.getProjection();

  if (shadow == false) {
   // Get the current location
   Double latitude = location.getLatitude() * 1E6;
   Double longitude = location.getLongitude() * 1E6;
   GeoPoint geoPoint = new GeoPoint(latitude.intValue(), longitude
     .intValue());

   // Convert the location to screen pixels
   Point point = new Point();
   projection.toPixels(geoPoint, point);

   RectF oval = new RectF(point.x - mRadius, point.y - mRadius,
     point.x + mRadius, point.y + mRadius);

   // Setup the paint
   Paint paint = new Paint();
   paint.setARGB(255, 255, 255, 255);
   paint.setAntiAlias(true);
   paint.setFakeBoldText(true);

   Paint backPaint = new Paint();
   backPaint.setARGB(180, 50, 50, 50);
   backPaint.setAntiAlias(true);

   RectF backRect = new RectF(point.x + 2 + mRadius, point.y - 3
     * mRadius, point.x + 65, point.y + mRadius);

   // Draw the marker
   canvas.drawOval(oval, paint);
   canvas.drawRoundRect(backRect, 5, 5, backPaint);
   canvas.drawText("Here I Am", point.x + 2 * mRadius, point.y, paint);
  // canvas.drawPath(mPath, mPaint);
  }
  super.draw(canvas, mapView, shadow);
 }

 private void touch_up() {
  System.out.println("onClick");

  mPath.lineTo(mX, mY);
  // commit the path to our offscreen
  mCanvas.drawPath(mPath, mPaint);
  // kill this so we don't double draw
  mPath.reset();
 }

 // @Override
 public boolean onTouchEvent(android.view.MotionEvent event, MapView mapView) {
  System.out.println("onClick");

  float x = event.getX();
  float y = event.getY();

  switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
   touch_start(x, y);

   break;
  case MotionEvent.ACTION_MOVE:
   touch_move(x, y);

   break;
  case MotionEvent.ACTION_UP:
   touch_up();

   break;
  }
  return true;
 }
 @Override
 public boolean onTap(GeoPoint point, MapView mapView) {
  return false;
 }
}

공지사항을 확인하였습니다.