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

Neue Themen


Oben