2012-05-26 13 views
6

Ok forse mi manca qualcosa qui, ma sono bloccato per ore. Faccio un'app in cui l'utente dipinge una linea di quota sopra un'immagine. Ora voglio dipingere anche alcuni punti di selezione che mostrano che la linea è selezionata. Questi punti sono una bitmap specifica che deve trovarsi alla fine della linea (dopo la punta della freccia) e ruotata in base alla freccia. Ho creato una DrawSelectionPoint classe che estende View e posso ruotare la bitmap con qualcosa di simile:Android - vernice bitmap ruotata in una posizione specifica su tela

selectionPoint = BitmapFactory.decodeResource(context.getResources(), 
        R.drawable.selectionpoint); 
Matrix matrix = new Matrix(); 
     matrix.postRotate((float)Math.toDegrees(angle));   
canvas.drawBitmap(selectionPoint, matrix, null); 

(dove l'angolo è l'angolo della linea) in questo modo il mio bitmap viene ruotato il modo in cui lo voglio ma è dipinto sul punto 0,0 (in alto a sinistra dello schermo).

Se uso qualcosa come

canvas.save(); 

canvas.rotate(); 

canvas.drawBitmap(selectionPoint, x, y, null); 

canvas.restore(); 

poi mi trovo troppo difficile disegnare la bitmap nella posizione esatta che voglio (dato che vorrei richiamare su una tela ruotato, che ruoto posteriore in seguito). Ho provato alcune trasformazioni di rotazione euclidea ma non ho avuto fortuna.

C'è un modo per applicare la rotazione della matrice e fornire anche i punti in cui è necessario disegnare la bitmap? Grazie in anticipo!

risposta

18

Si supponga di voler disegnare la bitmap in cui il centro della bitmap sarà in coordinate (px, py). Avere una variabile membro

Matrix matrix = new Matrix(); 

e nel tuo OnDraw:

matrix.reset(); 
matrix.postTranslate(-bitmap.getWidth()/2, -bitmap.getHeight()/2); // Centers image 
matrix.postRotate(angle); 
matrix.postTranslate(px, py); 
canvas.drawBitmap(bitmap, matrix, null); 
+0

che sembra funzionare! Grazie mille! – george

+0

non funziona per me la sua rotazione con la linea. –

Problemi correlati