2012-05-26 8 views
6

Ok, tal vez me falta algo aquí, pero estoy atascado durante horas. Realizo una aplicación donde el usuario pinta una línea de dimensión sobre una imagen. Ahora quiero pintar también algunos puntos de selección que muestran que la línea está seleccionada. Estos puntos son un mapa de bits específico que debe estar al final de la línea (después de la punta de flecha) y girar de acuerdo con la flecha. He creado una DrawSelectionPoint clase que se extiende Vista y puedo girar el mapa de bits con algo como esto:Android - pintura de mapa de bits girado en una ubicación específica en el lienzo

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

(donde el ángulo es el ángulo de la línea) de esta manera mi mapa de bits se gira la forma que yo quiero pero está pintado en el punto 0,0 (parte superior izquierda de la pantalla).

Si utilizo algo como

canvas.save(); 

canvas.rotate(); 

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

canvas.restore(); 

entonces me resulta demasiado difícil de dibujar el mapa de bits en el lugar exacto que quiero (ya que dibujo en un lienzo rotada, que puedo girar de nuevo más tarde). Intenté algunas transformaciones de rotación euclidianas, pero no tuve suerte.

¿Hay alguna forma de aplicar la rotación de la matriz y también dar los puntos donde necesito que se dibuje el mapa de bits? ¡Gracias de antemano!

Respuesta

18

supongamos que desea dibujar el mapa de bits donde el centro del mapa de bits estará en (px, py) coordenadas del lienzo. Tener una variable miembro

Matrix matrix = new Matrix(); 

y en su 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

que parece funcionar! ¡muchas gracias! – george

+0

no funciona para mí, está rotando con la línea. –

Cuestiones relacionadas