2012-12-09 21 views
7

creo un rettangolo in una dimensione specifica, e ora voglio ruotarlo a 45 gradi, ho usato canvas.rotate, matrix, ma non funziona. come è il modo corretto di ruotare la tela in Android? e sono curioso su Path.Direction.CW, è usato per la rotazione? ma io non vedo alcuna funzione di rotazione a Path()android come ruotare tela rect

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

Se siete curiosi di sapere Path.Direction, perché non Google? Primo colpo: http://developer.android.com/reference/android/graphics/Path.Direction.html. Perché stai ruotando la tela prima di disegnare il percorso? Cosa stai cercando di ottenere? – Simon

+0

dice in senso orario e antiorario, non ne capisco il significato. semplice, voglio solo ruotare il rettangolo che ho creato "path.addRect (166, 748, 314, 890, Path.Direction.CW);". se rimuovo canvas.rotate (45), verrà visualizzato un rettangolo sullo schermo, ora voglio ruotarlo a 45 gradi. già cercato su Google ma non riesci a trovare alcuna soluzione –

+0

Hai ruotato la tela, quindi traccia il percorso. Quindi viene ruotato solo ciò che viene disegnato prima che il percorso (non assomigli a nulla). Perché nessun percorso di disegno quindi ruota? – Simon

risposta

13

per disegnare un rettangolo ruotato è necessario ruotare la tela prima disegno , (quindi ruotalo di nuovo a destra se stai disegnando qualcos'altro). Canvas.rotate() modifica semplicemente la matrice di trasformazione della tela, che trasforma le forme disegnate dopo la chiamata.

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

Path.Direction non ha nulla a che fare con le trasformazioni di rotazione. Dalla docs:

Specifica come forme chiuse (ad esempio rettangoli, ovali) sono orientate quando vengono aggiunti a un percorso.

0

modo corretto dovrebbe essere qualcosa di simile:

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

Se si vuole disegnare qualcosa da (x,y) punto, è necessario ruotare la tela intorno (x,y) punto. Per fare questo è necessario utilizzare

canvas.rotate(45,x,y); 

così,

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