2012-12-09 22 views
7

ich ein Rechteck in einer bestimmten Größe erstellen, und jetzt möchte ich es auf 45 Grad drehen, ich verwendete canvas.rotate, Matrix, aber nicht funktioniert. Wie ist der richtige Weg, Leinwand in Android zu drehen? und ich bin neugierig auf Path.Direction.CW, wird es für die Rotation verwendet? aber ich sehe keine Rotationsfunktion in Weg()android, wie Canvas rect zu drehen

paint.setAntiAlias(true); 
    paint.setStrokeWidth(2); 
    paint.setColor(Color.BLUE); 
    paint.setAlpha(75); 

    Path path = new Path(); 
    path.addRect(166, 748, 314, 890, Path.Direction.CW); 
    canvas.rotate(45); 
    canvas.drawPath(path, paint); 
+0

Wenn Sie Path.Direction neugierig sind, warum nicht Google? Erster Treffer - http://developer.android.com/reference/android/graphics/Path.Direction.html. Warum drehen Sie die Leinwand, bevor Sie den Pfad zeichnen? Was versuchst du zu erreichen? – Simon

+0

es sagt im und gegen den Uhrzeigersinn, ich verstehe seine Bedeutung nicht. Einfach, ich möchte nur das Rechteck drehen, das ich erstellt habe "path.addRect (166, 748, 314, 890, Path.Direction.CW);". Wenn ich canvas.rotate (45) entferne, wird ein Rechteck auf dem Bildschirm angezeigt, jetzt möchte ich es um 45 Grad drehen. habe bereits gegoogelt, kann aber keine Lösung finden –

+0

Sie haben die Leinwand gedreht, dann zeichnen Sie den Pfad. Also nur was vor dem Pfad gezeichnet wird (sieht aus wie nichts) wird gedreht. Warum dreht sich dann kein Zeichenpfad? – Simon

Antwort

13

Um ein gedrehtes Rechteck, das Sie benötigen ziehen die Leinwand vor Zeichnung zu drehen (Drehen Sie es dann nach rechts, wenn Sie etwas anderes zeichnen). Canvas.rotate() ändert nur die Umwandlungsmatrix der Arbeitsfläche, die die gezeichneten Formen nach den Aufruf transformiert.

canvas.save(); 
canvas.rotate(45); 
canvas.drawRect(166, 748, 314, 890, paint); 
canvas.restore(); 

Path.Direction hat nichts mit Rotationstransformationen zu tun. Vom docs:

Gibt an, wie geschlossene Formen (zum Beispiel Rects, Ellipsen) orientiert sind, wenn sie zu einem Pfad hinzugefügt werden.

0

Die richtige Art und Weise so etwas wie dies sein sollte:

Path path = new Path(); 
path.addRect(166, 748, 314, 890, Path.Direction.CW); 
canvas.save(); // first save the state of the canvas 
canvas.rotate(45); // rotate it 
canvas.drawPath(path, paint); // draw on it 
canvas.restore(); // restore previous state (rotate it back) 
4

Wenn Sie etwas von (x,y) Punkt zeichnen möchten, müssen Sie die Leinwand (x,y) Punkt drehen. Hierfür sollten Sie

canvas.rotate(45,x,y); 

verwenden so,

canvas.save(); 
canvas.rotate(45,x,y); 
//all drawing from (x,y) point 
canvas.restore();