Android图像缩放animation相对于中心点

我有一个ImageView,我做了一个简单的缩放animation。 非常标准的代码。

我的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> 

我的animation代码:

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

问题:

当图像缩放时,不会从中心缩放,而是从左上angular缩放。 换句话说,图像的缩放比例与中心不一样,但左上angular相同。 这是一个链接,解释我的意思。 第一个图像是animation的缩放比例,第二个图像是我想如何缩放的。 它应该保持中心点一样。 我已经尝试在图像上设置重力,在容器上左右alignment,总是缩放相同。 我使用RelativeLayout作为主屏幕,ImageView被放置在另一个RelativeLayout中,但是我尝试了其他布局,没有改变。

忘记额外的翻译,将android:pivotXandroid:pivotY设置为宽度和高度的一半,它将从图像的中心缩放。

50%是animation视图的中心。

50%p是父母的中心

 <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"/> 

@stevanveltema和@JiangQi提供的答案是完美的,但如果你想使用代码进行缩放,那么你可以使用我的答案。

 // 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); 

您可以使用您的设置中的翻译animation来抵消。 您可能需要调整toXDelta和toYDelta值才能保持图像居中。

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