Comprensión del uso de ImageView Matrix

Sé que SO está lleno de preguntas Matrix, pero no puedo encontrar una pregunta donde se explica plenamente. Supongo que cualquier ImageView tiene una matriz que es responsable de escalar, girar y la posición. Pero por qué no puedo girar 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 que lo hagan 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 girar? Además, si establezco la Matriz del segundo ejemplo, ¿Por qué no vuelve a girar (en su grado original) si vuelvo a establecer la matriz de rotationMatrix ? Si quiero obtener el grado original, puedo establecer una Matriz construida sencilla. Pero de nuevo no entiendo por qué

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

no trabajará.

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

EDIT: 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 utilizar la matriz en su lugar. También Lo que sospecho que el trabajo fue esto (que en realidad no, también):

 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); 

One Solution collect form web for “Comprensión del uso de ImageView Matrix”

Mirando el origen que parece que en el método setImageMatrix () se aplica el cálculo de la matriz. El uso de esta matriz después (es decir, después de obtenerla por el getter) no tendrá ningún efecto si el cálculo se realiza en el método setter.

  • Androide ImageView una rotación de dedo
  • Cómo girar cuatro sprites al foco de estos sprites
  • Android - ¿Cómo diseñar un tipo de diseño de Rotary Dialer / Rotary Dialer?
  • Traducción después de la rotación
  • La rotación de Css no se aplica en android (phonegap)
  • Android Rotación de MapView
  • ¿La imagen resultante de la cámara Android debe girarse después de la captura?
  • Imagen fuera de límites después de la transformación en la vista
  • Rotar la imagen en el centro no va lisa (Monodroid)
  • LibGDX 1.5 girando sprite alrededor de su centro
  • Android Animated Vector Drawable: cambia el grado de rotación en tiempo de ejecución
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.