Android image scale animation relative to center point

Tomislav Markovski picture Tomislav Markovski · Dec 7, 2011 · Viewed 86.7k times · Source

I have an ImageView and I do a simple scale animation to it. Very standard code.

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

My animation code:

Animation a = AnimationUtils.loadAnimation(this, R.anim.scale_up);
((ImageView) findViewById(R.id.circle_image)).startAnimation(a);

The problem:

When the image scales it doesn't scale from the center, but from the top left corner. In other word, the scaled verion of the image doesn't have the same point as center, but it has the same top-left point. Here's a link that explains what I mean. The first image is how the animation scales, and the second image is how I want it to scale. It should keep the center point the same. I have tried setting up gravity on the image, on the container, aligning left or right, it always scales the same. I'm using RelativeLayout for the main screen and ImageView is located into another RelativeLayout, but I tried other layouts, no change.

Answer

Jiang Qi picture Jiang Qi · Mar 16, 2013

50% is center of animated view.

50%p is center of parent

<scale
    android:fromXScale="1.0"
    android:toXScale="1.2"
    android:fromYScale="1.0"
    android:toYScale="1.2"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="175"/>