2016-08-31 3 views
0

Ich erstelle eine grundlegende Zeichenanwendung. Die folgenden Funktionen werden zum Zeichnen der Linie verwendet.Android Leinwand Zeichnung Linie

public void touchEventLine(MotionEvent event){ 

     Log.e("Canvas","Line Specific Event"); 
     float x = event.getX(); 
     float y = event.getY(); 


     switch (event.getAction()){ 

      case MotionEvent.ACTION_DOWN: 

       Log.e("Canvas","Line Specific Event: Action Down"); 
       startX=x; 
       startY=y; 
       mPath.moveTo(startX,startY); 
       Log.e("Canvas","Line Specific Event: Moved to X:"+startX+" Y:"+startY); 
       mX=x; 
       mY=y; 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_MOVE: 

       Log.e("Canvas","Line Specific Event: Action Move"); 
       endX=x; 
       endY=y; 
       drawLine(endX,endY); 
       Log.e("Canvas","Line Specific Event: Drawing From X:"+startX+" Y:"+startY+" to X:"+endX+" Y:"+endY); 
       paths.add(mPath); 
       colorsMap.put(mPath,selectedColor); 
       mPath = new Path(); 
       isDrawing++; 
       invalidate(); 
       if(isDrawing>1) { 
        paths.remove(paths.size() - 2); 
        isDrawing--; 
       } 
       break; 
      case MotionEvent.ACTION_UP: 



       Log.e("Canvas","Line Specific Event: Action Up"); 
       endX=x; 
       endY=y; 

       drawLine(endX,endY); 
       paths.add(mPath); 
       colorsMap.put(mPath,selectedColor); 
       mPath = new Path(); 
       paths.remove(paths.size() - 2); 
       invalidate(); 
       isDrawing=0; 
       break; 



     } 

    } 

und die drawLine() Funktion ist

private void drawLine(float x2,float y2){ 

     mPath.lineTo(x2,y2); 
     invalidate(); 
     Log.e("Canvas","Line Drawn"); 

    } 

und meine OnDraw() Funktion ist

protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawBitmap(mBitmap, 0, 0, canvasPaint); 
     canvas.drawPath(mPath,drawPaint); 

     for (Path p : paths) { 

      int curColor= colorsMap.get(p); 
      drawPaint.setColor(curColor); 
      canvas.drawPath(p, drawPaint); 
     } 

     Log.e("Canvas","OnDraw() Called"); 


    } 

Mein Problem ist, dass die Linie von links oben zieht Ecke des Bildschirms. Ich glaube es ist (0,0). Ich habe die gleiche Logik zum Zeichnen von Kreis und Rechteck verwendet, und beide funktionieren gut. Gibt es einen Fehler in meiner Logik? Wie kann ich das beheben ..? Vielen Dank im Voraus

+0

Haben Sie "canvas.drawLine" ausprobiert? –

+0

oben links auf der Leinwand ist (0,0) wie Sie erraten, aber was ist das Problem? – lelloman

+0

Nein .. weil ich eine Rückgängig-Funktion implementiert habe, die nur funktioniert, wenn ich Pfad verwende. –

Antwort

2

Es ist einfach. sollten Sie

path.moveTo(firstPoint_X, firstPoint_y); 

am ersten der Zeichnung nennen.

(nach jeder Zeile, die Sie mpath = new Pfad() aufrufen;)

wenn Sie nicht nennen

path.moveTo

Methode, nachdem Sie ein neues machen Instanz der Path-Klasse, beginnt standardmäßig Zeichnung von Position (0,0) von Bildschirm