Рисование линии с помощью наложения в Google Map API для Android с пользовательским вводом? - PullRequest
0 голосов
/ 29 февраля 2012

Я хотел бы узнать, можно ли нарисовать линию с наложением карты, используя пользовательский ввод?Так как пользователь выбирает две точки и между ними рисуется линия.У меня есть код, который рисует линию от верхнего левого угла экрана до точки на 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");
}

}

1 Ответ

1 голос
/ 01 января 2013

вы можете попробовать это .он использует местоположение, а затем конвертировать в GeoPoint.Вы можете получить местоположение от пользователя, когда они касаются экрана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...