Android osmdroid bunuspack HandDrawOverlay- mehr Linien

BergJava

Aktives Mitglied
Hallo, ich habe diese Beispiel
Java:
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;
     }
}

Das funktioniert auch, nur möchte ich gerne mehr Linien zeichnen.
Gestartet wird das über

Java:
 HandDrawOverlay handDrawOverlay;
    @Override
    public boolean singleTapConfirmedHelper(GeoPoint geoPoint) {

        Toast.makeText(getActivity(), " has been tapped!", Toast.LENGTH_SHORT).show();

        return false;
    }

    @Override
    public boolean longPressHelper(GeoPoint geoPoint) {
        Toast.makeText(getActivity(), " has been tapped22!", Toast.LENGTH_SHORT).show();


        handDrawOverlay = new HandDrawOverlay(getActivity());


       //
handDrawOverlay.isEditMode();
            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);
        return false;

    }
Danke für eure Hilfe
 

Robat

Top Contributor
kenne mich mit osmdroid nicht so gut aus.
Aber rein vom logischen:
könntest du nicht im Konstruktor deine Punkte übergeben - als Array - und dann in deiner draw Methode durch das Array loopen und mit den Punkten zeichenen?

EDIT: Das mit dem Konstruktor ist quatsch, aber das mit dem Array sollte trotzdem funtkionieren. Habe gerade gesehen, dass du die Punkte in der onTouch bekommst
 

Ähnliche Java Themen


Oben