Estoy usando el siguiente código para rotar una imagen en ImageView por un ángulo. ¿Existe algún método más simple y menos complejo disponible?
ImageView iv = (ImageView)findViewById(imageviewid);
TextView tv = (TextView)findViewById(txtViewsid);
Matrix mat = new Matrix();
Bitmap bMap = BitmapFactory.decodeResource(getResources(),imageid);
mat.postRotate(Integer.parseInt(degree));===>angle to be rotated
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,bMap.getWidth(),bMap.getHeight(), mat, true);
iv.setImageBitmap(bMapRotate);

Respuestas:
Otra forma simple de rotar un
ImageView:ACTUALIZACIÓN:
Importaciones requeridas:
Código: (Asumiendo
imageView,angle,pivotXypivotYya están definidos)Este método no requiere crear un nuevo mapa de bits cada vez.
fuente
ImageViewvalores de 's:matrix.postRotate( 180f, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);ImageView'ssrcatributo.getDrawable()estaba volviendo nulo para mí hasta que me di cuenta de que había establecido el atributoImageView's enbackgroundlugar desrc. facepalmmImageView.setRotation(angle)con API> = 11fuente
ViewPropertyAnimator, que se usa comoaView.animate().rotation(20).start()rotationBy(). Por ejemplo,view.animate().rotationBy(180f).start(). Pero se vuelve problemático si se hace clic sucesivamente en la vista.Si admite API 11 o superior, puede usar el siguiente atributo XML:
Es posible que no se muestre correctamente en la vista previa xml de Android Studio, pero funciona como se esperaba.
fuente
backgroundpara ver el efecto.Hay dos maneras de hacerlo:
1 Utilizando
Matrixpara crear un nuevo mapa de bits:2 uso
RotateAnimationen elViewque desea girar, y asegúrese de que el conjunto de Animación afillAfter=true,duration=0yfromDegrees=toDgreese inflar la animación en código:
fuente
Sé que esto es increíblemente tarde, pero fue útil para mí, por lo que puede ayudar a otros.
A partir de API 11, puede establecer la rotación absoluta de un ImageView mediante programación utilizando
imageView.setRotation(angleInDegrees);métodoPor absoluto, quiero decir que puede llamar repetidamente a esta función sin tener que realizar un seguimiento de la rotación actual. Es decir, si giro pasando
15FalsetRotation()método y luegosetRotation()vuelvo a llamar con30F, la rotación de la imagen será de 30 grados, no de 45 grados.Nota: Esto realmente funciona para cualquier subclase del objeto View , no solo ImageView.
fuente
Esta es mi implementación de RotatableImageView . Su uso es muy fácil: sólo tienes que copiar attrs.xml y RotatableImageView.java en su proyecto y añadir RotatableImageView a su disposición. Establezca el ángulo de rotación deseado con el ejemplo: parámetro de ángulo .
Si tiene algunos problemas para mostrar la imagen, intente cambiar el código en el método RotatableImageView.onDraw () o use el método draw () en su lugar.
fuente
También se puede hacer de esta manera: -
Tengo de aquí.
fuente
Además, si desea rotar un ImageView 180 grados vertical u horizontalmente, puede usar
scaleYoscaleXpropiedades y establecerlas en-1f. Aquí hay un ejemplo de Kotlin:1fEl valor se utiliza para devolver un ImageView a su estado normal:fuente
Tengo una solución para esto. En realidad, es una solución a un problema que surge después de la rotación (la imagen rectangular no se ajusta a ImagView) pero también cubre su problema. Aunque esta solución tiene animación para bien o para mal
No es posible obtener los parámetros de imageView al iniciar la actividad. Para hacerlo, consulte esta solución O configure las dimensiones en onHaga clic en un botón como este
Y el código que se ejecutará cuando queramos rotar ImageView
Esta solución es suficiente para el problema anterior. Aunque reducirá la vista de imagen incluso si no es necesario (cuando la altura es menor que el ancho). Si le molesta, puede agregar otro operador ternario dentro de scaleX / scaleY.
fuente
Creo que el mejor método :)
fuente
Rotar una imagen en Android con retraso:
fuente
prueba esto en una vista personalizada
fuente
Aquí hay una buena solución para poner un dibujo giratorio para una imageView:
uso:
otra alternativa:
Además, si desea rotar el mapa de bits, pero tiene miedo de OOM, puede usar una solución NDK que he creado aquí
fuente
Si solo desea rotar la vista visualmente, puede usar:
fuente
Para Kotlin
Esto rotará la imagen Vista en lugar de girar la imagen
Además, aunque es un método en
Viewclase. Por lo tanto, puede rotar prácticamente cualquier vista usándolo.fuente
Lamentablemente, no creo que haya. La
Matrixclase es responsable de todas las manipulaciones de imágenes, ya sea rotando, encogiendo / creciendo, sesgando, etc.http://developer.android.com/reference/android/graphics/Matrix.html
Mis disculpas, pero no puedo pensar en una alternativa. Tal vez alguien más pueda hacerlo, pero las veces que he tenido que manipular una imagen he usado una matriz.
¡La mejor de las suertes!
fuente
Otra posible solución es crear su propia vista de imagen personalizada (digamos
RotateableImageView extends ImageView) ... y anular onDraw () para rotar los lienzos / mapas de bits antes de volver al lienzo. No olvide restaurar el lienzo nuevamente.Pero si va a rotar solo una instancia de vista de imagen, su solución debería ser lo suficientemente buena.
fuente
sin matriz y animada:
fuente
solo escribe esto en tu onactivityResult
fuente
Pruebe este código 100% de trabajo;
Al hacer clic en el botón rotar, escriba este código:
fuente
En lugar de convertir la imagen en mapa de bits y luego girarla, intente girar la vista de imagen directa como se muestra a continuación.
fuente
Siga la respuesta a continuación para la rotación continua de una vista de imagen
Si se hace clic en el botón rotar
fuente
si desea rotar una imagen 180 grados, coloque estos dos valores en la etiqueta imageview: -
Explicación: - scaleX = 1 y scaleY = 1 se repiten, es estado normal, pero si ponemos -1 en la propiedad scaleX / scaleY, se rotará 180 grados
fuente
¿cómo utilizar?
fuente
Simplemente puede usar el atributo de rotación de ImageView
A continuación se muestra el atributo de ImageView con detalles de la fuente de Android
fuente