2016-07-23 11 views
0

Ich versuche, eine einfache Zeichnung app ich, die der Benutzer kann einen Punkt meiner benutzerdefinierten Ansicht drücken und ziehen, um ein Rechteck oder einen Kreis zu erstellen, schaffte es, es ziemlich leicht zu tun.android canvas draw shapes mit geist

Das Problem entstand, wenn ich versuche, dem Benutzer den Fortschritt der Bewegung ihrer Form zu zeigen, wie es größer oder kleiner wird.

es zu erklären, einfach ich den gleichen Effekt wollen wie auf Fenster, wenn Sie durch Klicken und Ziehen der Maus auf dem Desktop ..

das ist mein onTouchEvent Methode, wie kann ich es tun?

if (chosenShape.equals("rectangle")) { 


     switch (event.getAction()) { 


      case MotionEvent.ACTION_DOWN:// user start pressing 
       //starting point - one side of the rect 
       starting_X = touchX; 
       starting_Y = touchY; 
       break; 
      case MotionEvent.ACTION_MOVE:// user move while pressing 

       break; 
      case MotionEvent.ACTION_UP:// user release 
       //ending point - thie side of the circle 
       ending_X = touchX; 
       ending_Y = touchY; 
       // draw the rectangle - opposite side of the rect 
       drawCanvas.drawRect(starting_X, starting_Y, ending_X, ending_Y, drawPaint); 
       chosenShape = "";// reseting the shape to keep drawing 
       break; 
      default: 
       return false; 

     } 
    } else { 

     switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN: 
       drawPath.moveTo(touchX, touchY); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       drawPath.lineTo(touchX, touchY); 
       break; 
      case MotionEvent.ACTION_UP: 
       drawCanvas.drawPath(drawPath, drawPaint); 
       drawPath.reset(); 
       break; 
      default: 
       return false; 
     } 
    } 

Antwort

1

In Ihrem case MotionEvent.ACTION_MOVE: müssen Sie die ending_X und ending_Y Werte einzustellen.

Besser noch wäre zu verfolgen intermediate_x und intermediate_y, so dass Sie einen anderen Effekt, zum Beispiel eine gestrichelte Linie statt fest zeichnen können.

Sie speichern wahrscheinlich alle Shapes, die ein Benutzer gezeichnet hat, und aktualisieren die Leinwand jedes Mal, wenn ein Touch-Ereignis eintritt. Andernfalls werden die Shapes übereinander gezeichnet, wenn Sie die Anzeige ziehen .

+0

ich kann diese Formen speichern, aber ich kann sie nicht aus der Leinwand entfernen, wie mache ich das? Wie kann ich die Leinwand aktualisieren? du meinst invalidate()? weil das nicht funktioniert –

+0

Wenn Sie 'invalidate()' nicht funktionieren können, versuchen Sie 'canvas.drawColor (Color.TRANSPARENT, Mode.CLEAR);' – ScouseChris