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.

  • Rotar una matriz de bytes YUV en Android
  • Android - ¿Cómo diseñar un tipo de diseño de Rotary Dialer / Rotary Dialer?
  • La rotación de Css no se aplica en android (phonegap)
  • DialogFragment en Fragmento con rotación de pantalla
  • Android: obtiene la orientación del dispositivo desde Azimuth, roll y pitch
  • Cómo girar un icono de Android en su punto central?
  • Rotar la vista de anuncio con API 8
  • Actividad de reinicio en la rotación de Android
  • Android Instrumentación Botón HOME
  • Fragmentos desaparecen cuando se rotan
  • Android ProgressBar personalizado no está girando
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.