Я хотел бы узнать, можно ли нарисовать линию с наложением карты, используя пользовательский ввод?Так как пользователь выбирает две точки и между ними рисуется линия.У меня есть код, который рисует линию от верхнего левого угла экрана до точки на MapView.Когда я щелкаю точку, линия перемещается к ней.Как бы настроить это так, чтобы рисовать линии только между двумя точками, которые были нажаты?
Я довольно новичок в этом материале, поэтому заранее благодарен за любую помощь
public class LBServicesActivity extends MapActivity
{
MapView mapView;
MapController mc;
GeoPoint p;
private ArrayList<GeoPoint> pointsList = new ArrayList();
float x, y;
int touchCount = 0;
String tag = "";
/** 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.mapView);
mc = mapView.getController();
String coordinates[] = {"1.352566007", "103.78921587"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
mc.setZoom(3);
//-- Add location marker
MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
//mapView.invalidate();
}
//Zoom into certain area
public boolean onKeyDown(int keyCode, KeyEvent event)
{
MapController mc = mapView.getController();
for(int i = 0; i< 2; i++)
{
GeoPoint ge = new GeoPoint(0,0);
ge = pointsList.get(i);
System.out.println(ge.getLatitudeE6());
System.out.println(ge.getLongitudeE6());
}
switch(keyCode)
{
case KeyEvent.KEYCODE_3:
mc.zoomIn();
break;
case KeyEvent.KEYCODE_1:
mc.zoomOut();
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected boolean isRouteDisplayed()
{
return false;
}
public class MapOverlay extends com.google.android.maps.Overlay
{
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow)
{
//super.draw(canvas,mapView,shadow);
//-- Create new paint object --
Paint mPaint = new Paint();
mPaint.setDither(true);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(2);
//--GeoPoint--
//Start Point of the Rectangle
//GeoPoint sP = new GeoPoint()
//--Translate the GeoPoint to screen pixels --
Point screenPts = new Point();
Point startPoint = new Point();
mapView.getProjection().toPixels(p, screenPts);
//mapView.getProjection().toPixels(arg0, startPoint)
//-- Draw a line between two points --
canvas.drawLine(0 , 0, screenPts.x, screenPts.y, mPaint);
//return true;
}
public boolean onTouchEvent(MotionEvent event,MapView mapView)
{
//-- When User lifts his finger --
if(event.getAction() ==1)
{
p = mapView.getProjection().fromPixels((int) event.getX(), (int) event.getY());
//Add p to the array called pointsList
pointsList.add(p);
//Counts the number of times the screen has been touched
for(int i =0; i< pointsList.size();i++)
{
GeoPoint points = new GeoPoint(pointsList.get(i).getLatitudeE6(),pointsList.get(i).getLongitudeE6());
System.out.print(pointsList.get(i));
System.out.print(points.toString());
}
//Display the lat and long of the point touched
Toast.makeText(getBaseContext(),"Location: " + p.getLatitudeE6() / 1E6 + ","
+ p.getLongitudeE6() / 1E6, Toast.LENGTH_SHORT).show();
touchCount = touchCount+1;
Log.d(tag, "This is the onTouchEvent No#:" + touchCount);
}
return false;
}
}
public void onStop()
{
super.onStop();
Log.d(tag,"In the onStop() event");
}
public void onDestroy()
{
super.onDestroy();
Log.d(tag,"In the onDestroy() event");
}
}