studio programacion herramientas fundamentos con avanzado aplicaciones android image matrix rotation image-rotation

programacion - manual de android en pdf



entender el uso de ImageView Matrix (1)

Al observar la fuente que se ve en el método setImageMatrix (), se aplica el cálculo de la matriz. El uso posterior de esta matriz (es decir, después de obtenerlo por el getter) no tendrá ningún efecto si el cálculo se realiza en el método setter.

Sé que SO está lleno de preguntas de Matrix, pero no puedo encontrar una pregunta donde esté completamente explicada. Supongo que cualquier ImageView tiene una matriz que es responsable de escalar, girar y la posición. Pero por qué no puedo rotar una imagen usando una matriz como esta:

ImageView img = (ImageView)findViewById(R.id.some_imageview); img.setScaleType(ScaleType.Matrix); Rect bounds = img.getDrawable.getBounds(); img.getImageMatrix().postRotate(180f, bounds.width() / 2, bounds.height() / 2);

varias respuestas sugieren hacerlo así:

ImageView img = (ImageView)findViewById(R.id.some_imageview); img.setScaleType(ScaleType.Matrix); Rect bounds = img.getDrawable.getBounds(); Matrix rotationMatrix = new Matrix(); rotationMatrix.postRotate(180f, bounds.width() / 2, bounds.height() / 2); img.setImageMatrix(rotationMatrix);

¿POR QUÉ tengo que crear una nueva matriz cada vez que quiero rotar? Además, si configuro Matrix a partir del segundo ejemplo, ¿por qué no está girando de nuevo (a su grado original) si configuro rotationMatrix nuevamente? Si quiero obtener el título original, puedo establecer una matriz construida completamente. pero una vez más, NO entiendo por qué

img.getImageMatrix().postRotate(180f, bounds.width() / 2, bounds.height() / 2);

no trabajará.

Nota: También probé el método setRotate sin observar ninguna diferencia

EDITAR: debido a un comentario

He preguntado por qué tengo que crear una nueva matriz cada vez, lo que implica la pregunta, por qué no puedo usar la matriz en su lugar. También sospecho que funcionaba esto (que en realidad tampoco):

ImageView img = (ImageView)findViewById(R.id.some_imageview); img.setScaleType(ScaleType.Matrix); Rect bounds = img.getDrawable.getBounds(); Matrix rotationMatrix = new Matrix(); rotationMatrix.postRotate(180f, bounds.width() / 2, bounds.height() / 2); img.setImageMatrix(rotationMatrix); //works until here. //Then after that successful call //assumed to get my Matrix back, which is rotated by 180 degrees Matrix matrix = img.getImageMatrix(); Rext bounds = img.getDrawable().getBounds() //rotate again at 90 degree. It should be now rotated 270 degrees (180 from before, plus 90 now) matrix.postRotate(90f, bounds.width() / 2, bounds.height() / 2); //unfortunately NO effect! img.setImageMatrix(matrix);