我有一个ImageView,我做了一个简单的缩放动画。非常标准的代码。
我的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 a = AnimationUtils.loadAnimation(this, R.anim.scale_up);
((ImageView) findViewById(R.id.circle_image)).startAnimation(a);
问题:
当图像缩放时,它不会从中心缩放,而是从左上角缩放。换句话说,图像的缩放版本与中心不具有相同的点,但它具有相同的左上角点。 Here's a link that explains what I mean.第一个图像是动画缩放的方式,第二个图像是我希望它缩放的方式。它应该保持中心点相同。我已经尝试在图像上设置重力,在容器上,左对齐或右对齐,它总是按比例缩放。 我正在使用RelativeLayout作为主屏幕,ImageView位于另一个RelativeLayout,但我尝试了其他布局,没有变化。
答案 0 :(得分:145)
50%
是动画视图的中心。
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"/>
答案 1 :(得分:98)
@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, i.e. 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);
答案 2 :(得分:69)
忘记其他翻译,将android:pivotX
,android:pivotY
设置为宽度和高度的一半,它将从图像的中心缩放。
答案 3 :(得分:5)
您可以使用集合中的平移动画来抵消它。您可能需要调整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>