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
,pivotX
ypivotY
ya están definidos)Este método no requiere crear un nuevo mapa de bits cada vez.
fuente
ImageView
valores de 's:matrix.postRotate( 180f, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);
ImageView
'ssrc
atributo.getDrawable()
estaba volviendo nulo para mí hasta que me di cuenta de que había establecido el atributoImageView
's enbackground
lugar 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
background
para ver el efecto.Hay dos maneras de hacerlo:
1 Utilizando
Matrix
para crear un nuevo mapa de bits:2 uso
RotateAnimation
en elView
que desea girar, y asegúrese de que el conjunto de Animación afillAfter=true
,duration=0
yfromDegrees=toDgrees
e 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
15F
alsetRotation()
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
scaleY
oscaleX
propiedades y establecerlas en-1f
. Aquí hay un ejemplo de Kotlin:1f
El 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
View
clase. Por lo tanto, puede rotar prácticamente cualquier vista usándolo.fuente
Lamentablemente, no creo que haya. La
Matrix
clase 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