Android转换动画更改默认位置

时间:2013-12-01 03:17:22

标签: android animation translate-animation

我有触摸事件,我更改了查看位置(图片拖放)

case MotionEvent.ACTION_MOVE:
         view.setTranslationX(X - xDelta);

在发布事件中,我将View设置为原始位置(0)

slideBack = new TranslateAnimation(Animation.ABSOLUTE,0,Animation.ABSOLUTE,view.getTranslationX()*-1,Animation.ABSOLUTE,0,Animation.ABSOLUTE,0);
slideBack.setFillAfter(true);
slideBack.setDuration(1000);

动画完成后,我的View将处于默认位置,但它的getTranslationX()将保持不变。当我开始动画时,它似乎将它的起始位置设置为默认值(0),然后补间回到getTranslationX()。

如何设置当前值应重置并用作新的(0)点? 或者我如何制作不会破坏翻译价值的动画?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

TranslateAnimation是一个视图动画,而不是属性动画。这些区别在这些文档和包含的代码段中定义:

http://developer.android.com/guide/topics/graphics/overview.html http://developer.android.com/guide/topics/graphics/prop-animation.html

  

视图动画系统的另一个缺点是它只是   修改了绘制视图的位置,而不是实际的视图本身。对于   例如,如果你动画一个按钮在屏幕上移动,那么   按钮绘制正确,但您可以单击的实际位置   按钮不会改变,所以你必须实现自己的逻辑   处理这个。

基本上,视图动画通过将变换矩阵应用于draw()中的DisplayList来工作。这会影响视图的绘制方式,但完全不同于View的任何属性。

另一方面,属性动画会影响View的属性,可能就是您想要使用的属性。尝试使用以下代码段替换TranslateAnimation:

ObjectAnimator anim = ObjectAnimator.ofFloat(view, "translationX", view.getTranslationX(), 0f);
anim.setDuration(1000);
anim.start();

当这个动画师运行时,它实际上会改变getTranslationX()返回的值,因此你的触摸处理代码将能够正确地确定视图的显示位置。