翻译动画

Anj*_*nju 30 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>
Run Code Online (Sandbox Code Playgroud)

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

Reu*_*ton 77

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

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

这就是说,你可以实现通过添加你一个简单的方法要什么android:fillAfter="true"给你的<translate>标签.请记住,图像并没有真正移动.如果您需要在动画结束时更新布局,请勾选AnimationListener并执行此操作onAnimationEnd().

  • 为什么不重要?有些代码会让这个答案变得很可爱 (10认同)

Anj*_*nju 52

我得到了它...而不是使用那个动画xml文件,我在java文件中写道.

Animation animation = new TranslateAnimation(0, 500,0, 0);
animation.setDuration(1000);
animation.setFillAfter(true);
myImage.startAnimation(animation);
myImage.setVisibility(0);
Run Code Online (Sandbox Code Playgroud)

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

  • 实际上,INVISIBLE是int == 1,VISIBLE == 0,gone == 2,[here](http://developer.android.com/reference/android/view/View.html#attr_android:visibility)**I代码中的setVisibility也有问题,所以我把View.VISIBLE/View.INVISIBLE放在.setVisibility中** (6认同)
  • 我不知道为什么代码有效.没有多大意义.尝试在`setVisibility()`方法中使用`View.VISIBLE`. (5认同)
  • 我一直跳回原来的地方?我认为问题是翻译,然后留在原地?setFillAfter(真); 没有将图像保持在预期的位置 (2认同)

Rac*_*nda 19

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

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

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

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

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

  • 在这个答案中使用你的链接来驱动流量是不受欢迎的!可能最好在此处包含该链接的摘要引用以防止链接腐烂! (2认同)