Animación de escala de imagen de Android relativa al punto central
Tengo un ImageView y hago una animación simple de la escala a él. Código muy estándar.
Mi scale_up.xml:
- Traducir y escalar la animación en paralelo
- Android ImageView escalado confict
- Android - Pinch zoom coordinar el evento ontouch
- Cómo configurar el zoom / ancho inicial para una vista web
- ¿Qué pasa con setScaleX / setScaleY?
<set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="1" android:fromYScale="1" android:toXScale="1.2" android:toYScale="1.2" android:duration="175"/> </set>
Mi código de animación:
Animation a = AnimationUtils.loadAnimation(this, R.anim.scale_up); ((ImageView) findViewById(R.id.circle_image)).startAnimation(a);
El problema:
Cuando la imagen se escala, no se escala desde el centro, sino desde la esquina superior izquierda. En otras palabras, la versión escalada de la imagen no tiene el mismo punto que el centro, pero tiene el mismo punto superior izquierdo. Aquí hay un enlace que explica lo que quiero decir. La primera imagen es cómo se escala la animación, y la segunda imagen es como quiero que escalen. Debe mantener el punto central igual. He intentado poner la gravedad en la imagen, en el contenedor, alinear a la izquierda oa la derecha, siempre escalas iguales. Estoy utilizando RelativeLayout para la pantalla principal y ImageView se encuentra en otro RelativeLayout, pero he intentado otros diseños, sin cambios.
- La barra de direcciones del navegador Mobile Webkit cambia $ (ventana) .height (); Haciendo el fondo-tamaño: la cubierta rescale cada vez
- Android ViewGroup.setScaleX () hace que la vista se recorte
- Ajustar imagen en ImageButton en Android
- OnScale y Canvas - ¿cómo ajustar el punto de origen después de ampliar la imagen?
- Escala automática TextView Text para ajustar dentro de límites
- Zoom en un lienzo utilizando la función canvas.scale?
- ¿Por qué mi escala vectorial no es como se espera?
- Cómo obtener una animación inversa de ActivityOptions.makeScaleUpAnimation al terminar la actividad de los niños en android?
Olvídate de la traducción adicional, establecer android:pivotX
, android:pivotY
a la mitad de la anchura y la altura y se escalará desde el centro de la imagen.
50%
es el centro de la vista animada.
50%p
es el centro del padre
<scale android:fromXScale="1.0" android:toXScale="1.2" android:fromYScale="1.0" android:toYScale="1.2" android:pivotX="50%p" android:pivotY="50%p" android:duration="175"/>
La respuesta proporcionada por @stevanveltema y @JiangQi son perfectas, pero si quieres escalar usando código, entonces puedes usar mi respuesta.
// first 0f, 1f mean scaling from X-axis to X-axis, meaning scaling from 0-100% // first 0f, 1f mean scaling from Y-axis to Y-axis, meaning scaling from 0-100% // The two 0.5f mean animation will start from 50% of X-axis & 50% of Y-axis, ie from center ScaleAnimation fade_in = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); fade_in.setDuration(1000); // animation duration in milliseconds fade_in.setFillAfter(true); // If fillAfter is true, the transformation that this animation performed will persist when it is finished. view.startAnimation(fade_in);
Puede utilizar la animación de traducción en su conjunto para compensar eso. Es probable que necesite ajustar los valores de toXDelta y ToYDelta para que se ajuste correctamente para que mantenga la imagen centrada.
<set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="1" android:fromYScale="1" android:toXScale="1.2" android:toYScale="1.2" android:duration="175"/> <translate android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="-20%" android:toYDelta="-20%" android:duration="175"/> </set>
- ¿Cuál es la línea de base en RelativeLayout?
- ¿Cómo construir los proyectos de ejemplo de Android usando Ant? Build.xml no existe