我希望图像水平移动。 即图像应从左端底角移动到右端底角一次。 无需再次回到左下角。
我试过的那段代码是
<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>
这会将图像从左向右移动。但它再次走向左侧。 谁能告诉我如何解决这个问题?
答案 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-动画随时间变化的一组值。