밑에서 터치 좌표를 받아서 canvas.drawPath(mPath, mPaint)
이렇게해서 터치로 지도위에 그림이 그려지도록 하려고 하는데
소스상에는 문제가 없어 보이는데 g1에서 실행을 시키면 오류가 나네요..
왜그런지 알려주세요!!


package Messenger.com;

import android.content.Context;
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 android.view.View;

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 {

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

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

 Location location;

 private final int mRadius = 5;

 private Paint mPaint;
 private Path mPath;
 private Bitmap mBitmap;

 @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.drawBitmap(backImg, 0, 0, mPaint);
 //  canvas.drawBitmap(mBitmap, 0, 0, mPaint);
 //  canvas.drawPath(mPath, backPaint);
  }
  super.draw(canvas, mapView, shadow);
 }

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

 public class MyView extends View {

  private static final float MINP = 0.25f;
  private static final float MAXP = 0.75f;

  private Bitmap mBitmap;
  private Canvas mCanvas;
  private Path mPath;
  private Paint mBitmapPaint;
  private Bitmap src;

  public MyView(Context c) {
   super(c);

   mBitmap = Bitmap.createBitmap(320, 480, Bitmap.Config.ARGB_8888);
   mCanvas = new Canvas(mBitmap);
   mPath = new Path();
   mBitmapPaint = new Paint(Paint.DITHER_FLAG);

  }

  @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
   super.onSizeChanged(w, h, oldw, oldh);
  }
  
  /*@Override
  protected void onDraw(Canvas canvas) {
   canvas.drawBitmap(backImg, 0, 0, mPaint);
   canvas.drawBitmap(mBitmap, 0, 0, mPaint);
   canvas.drawPath(mPath, mPaint);
   super.onDraw(canvas);
  }*/

  private float mX, mY;
  private static final float TOUCH_TOLERANCE = 4;

  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;
   }
  }

  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(MotionEvent event) {
   System.out.println("onClick");
   
   float x = event.getX();
   float y = event.getY();

   switch (event.getAction()) {
   case MotionEvent.ACTION_DOWN:
    touch_start(x, y);
    invalidate();
    break;
   case MotionEvent.ACTION_MOVE:
    touch_move(x, y);
    invalidate();
    break;
   case MotionEvent.ACTION_UP:
    touch_up();
    invalidate();
    break;
   }
   return true;
  }
 }
}