翻译动画

时间:2010-11-18 09:38:39

标签: android

我希望图像水平移动。 即图像应从左端底角移动到右端底角一次。 无需再次回到左下角。

我试过的那段代码是

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">

<translate android:fromXDelta="0%p" android:toXDelta="200%p" 
android:duration = "2000"/>
</set>

这会将图像从左向右移动。但它再次走向左侧。 谁能告诉我如何解决这个问题?

3 个答案:

答案 0 :(得分:77)

你已成为每个人首先对Android动画产生的巨大误解的牺牲品:动画ImageView(或任何类型的视图)实际上并未移动(或缩放或旋转或褪色)。这完全是一个技巧......动画本质上是屏幕合成引擎的最后一分钟指令,用x / y偏移视图,用z旋转等等。视图的基础位置/大小/角度/ alpha永远不会真正改变。

因此,当动画结束时,您的图像会弹回到起点,因为它实际上从未离开过它。

也就是说,通过向android:fillAfter="true"标记添加<translate>,您可以通过简单的方式实现目标。请记住,图像没有真正移动。如果您需要在动画结束时更新布局,请勾选AnimationListener并在onAnimationEnd()中执行此操作。

答案 1 :(得分:49)

我明白了......我没有使用那个动画xml文件,而是在java文件中写道。

Animation animation = new TranslateAnimation(0, 500,0, 0);
animation.setDuration(1000);
animation.setFillAfter(true);
myImage.startAnimation(animation);
myImage.setVisibility(0);

现在图像从左向右移动,然后它变得不可见......因此动画! :)

答案 2 :(得分:17)

翻译动画可以改变对象的视觉外观,但是它们无法更改对象本身。也就是说,如果您将转换动画应用于视图,它将移动到新位置,但其点击事件不会被触发;点击事件仍会在之前的位置被触发。

这是因为视图仍处于原始位置。为了克服这个问题,我们可以使用实际移动对象的ObjectAnimation。 对象动画是唯一实际移动对象的动画。

您可以使用ObjectAnimator创建翻译动画。

ObjectAnimator transAnimation= ObjectAnimator.ofFloat(view, propertyName, fromX, toX);
transAnimation.setDuration(3000);//set duration
transAnimation.start();//start animation

view -this是要应用动画的视图 propertyName - 要设置动画的属性。 FromX,toX-动画随时间变化的一组值。