Android cómo dibujar la pintura en mano libre en MapView con superposición?

En mi app Dibujar pintura en mano libre en la vista de mapa, pero la búsqueda de mucha información finalmente se obtuvo de la forma de rectángulo dibujar en mapview pero quiero en lugar de rectángulo dibujar mano libre como zigzag cómo cambiar mi código Cualquier ayuda por favor ..

MapOverlay.java

public class MapOverlay extends Overlay { private float x1,y1,x2,y2; private GeoPoint p1=null,p2=null; private MapExampleActivity mv = null; private Paint paint = new Paint(); private Path path = new Path(); private boolean isUp = false; //constructor receiving the initial point public MapOverlay(MapExampleActivity mapV,float x,float y){ paint.setStrokeWidth(2.0f); x1 = x; y1 = y; mv = mapV; p1 = mapV.getMapView().getProjection().fromPixels((int)x1,(int)y1); } //override draw method to add our custom drawings @Override public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { if(p1 != null && p2 != null){ //get the 2 geopoints defining the area and transform them to pixels //this way if we move or zoom the map rectangle will follow accordingly Point screenPts1 = new Point(); mapView.getProjection().toPixels(p1, screenPts1); Point screenPts2 = new Point(); mapView.getProjection().toPixels(p2, screenPts2); //draw inner rectangle paint.setColor(Color.BLUE); // paint.setStyle(Style.FILL); canvas.drawPath(path, paint); canvas.drawRect(screenPts1.x, screenPts1.y, screenPts2.x, screenPts2.y, paint); //draw outline rectangle // paint.setColor(Color.YELLOW); paint.setStyle(Style.STROKE); // canvas.drawRect(screenPts1.x, screenPts1.y, screenPts2.x, screenPts2.y, paint); canvas.drawPath(path, paint); } return true; } @Override public boolean onTouchEvent(MotionEvent e, MapView mapView) { if(mv.isEditMode() && !isUp){ if(e.getAction() == MotionEvent.ACTION_DOWN){ x1 = y1 = 0; x1 = e.getX(); y1 = e.getY(); p1 = mapView.getProjection().fromPixels((int)x1,(int)y1); } //here we constantly change geopoint p2 as we move out finger if(e.getAction() == MotionEvent.ACTION_MOVE){ x2 = e.getX(); y2 = e.getY(); p2 = mapView.getProjection().fromPixels((int)x2,(int)y2); } //---when user lifts his finger--- if (e.getAction() == MotionEvent.ACTION_UP) { isUp = true; } return true; } return false; } 

}

Utilizando este i capaz de dibujar como este formas de rectángulo y dibujar hasta que haga clic en el botón de alternar (posible dibujar varias veces)

Forma rectangular

Quiero dibujar líneas en lugar de rectángulo como debajo de la imagen (dibujar varias veces).

Introduzca aquí la descripción de la imagen

Finalmente encontré este enlace este enlace proporciona rectángulo forma dibujar http://n3vrax.wordpress.com/2011/08/13/drawing-overlays-on-android-map-view/

Sólo cambiar el rectángulo para dibujar libre cualquier idea por favor ….

One Solution collect form web for “Android cómo dibujar la pintura en mano libre en MapView con superposición?”

Usted puede mano libre dibujar una línea usando el código abajo:

Código

 public class HandDrawOverlay extends Overlay { private boolean editMode = false; private boolean isTouched = false; private Paint paint = new Paint(); private Point screenPt1 = new Point(); private Point screenPt2 = new Point(); private ArrayList<GeoPoint> points = null; public HandDrawOverlay(){ paint.setStrokeWidth(2.0f); paint.setStyle(Style.STROKE); paint.setColor(Color.BLUE); } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { if(points != null && points.size() > 1){ mapView.getProjection().toPixels(points.get(0), screenPt1); for(int i=1; i<points.size();i++){ mapView.getProjection().toPixels(points.get(i), screenPt2); canvas.drawLine(screenPt1.x, screenPt1.y, screenPt2.x, screenPt2.y, paint); screenPt1.set(screenPt2.x, screenPt2.y); } } } @Override public boolean onTouchEvent(MotionEvent e, MapView mapView) { if(editMode){ int x = (int)e.getX(); int y = (int)e.getY(); GeoPoint geoP = mapView.getProjection().fromPixels(x,y); switch (e.getAction()) { case MotionEvent.ACTION_DOWN: isTouched = true; points = new ArrayList<GeoPoint>(); points.add(geoP); break; case MotionEvent.ACTION_MOVE: if(isTouched) points.add(geoP); break; case MotionEvent.ACTION_UP: if(isTouched) points.add(geoP); isTouched = false; break; } mapView.invalidate(); return true; } return false; } /** * @return the editMode */ public boolean isEditMode() { return editMode; } /** * @param editMode the editMode to set */ public void setEditMode(boolean editMode) { this.editMode = editMode; } } 

usar

 HandDrawOverlay handDrawOverlay; handDrawOverlay = new HandDrawOverlay(); mapView.getOverlays().add(handDrawOverlay); //Set edit mode to true to start drwaing handDrawOverlay.setEditMode(true); //Set edit mode to true to stop drwaing handDrawOverlay.setEditMode(false); 

Nota

Este es un ejemplo de funcionamiento completo para ayudarle a comenzar. Sin embargo, debe optimizar el código para que sea más eficiente (es decir, utilizando Path para almacenar la ruta de dibujo en onDraw() , reduciendo el número de puntos grabados en onTouch() , etc.).

Disfrútala.

  • Dibujo es constantemente llamado en mi superposición de mapa de Android
  • Dibujar una superposición similar a MapsApp
  • Dibuja una ruta en los mapas siguiendo la ruta de movimiento de los dedos en la pantalla del dispositivo
  • ¿Cómo puedo dibujar una flecha que muestre la dirección de manejo en MapView?
  • Especifique Layout Margen superior para la barra de acción de superposición
  • Dibujar superposición en Android (en todo el sistema)
  • Barra de herramientas Android superpuesta TabLayout en CollapsingToolbarLayout
  • RelativaLayout TextView superposición
  • ¿Cómo puedo poner una vista encima de un glSurfaceView con un fondo transparente?
  • Agregar Overlay a un MapView en osmdroid
  • Android: ItemizedOverlay onTouchEvent y onTap se superponen
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.