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:

<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.

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> 
  • Android VideoView cómo escalar como tipo de escala ImageView fitXY?
  • Android ViewPropertyAnimator no se escala al mismo tiempo
  • Escala de una aplicación Phonegap para diferentes tamaños de pantalla de Android / densidades?
  • Android ImageView debe ser más grande que la pantalla
  • Android ViewPager Con animación diferente como acercar, atenuarse, etc
  • Escalado de vista de superficie OpenGL para diferentes DPI
  • SetPivotX funciona extraño en la vista escalada
  • ¿Cómo puedo configurar mi aplicación Phonegap para escalar su visor de acuerdo con la resolución del teléfono?
  • Escala drawableLeft en el botón con el texto
  • Vídeo de escala de matriz en TextureView Android
  • Mover, escalar y recortar la imagen en android como facebook foto de perfil
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.