我有触摸事件,我更改了查看位置(图片拖放)
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)点? 或者我如何制作不会破坏翻译价值的动画?
感谢您的时间。
答案 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()返回的值,因此你的触摸处理代码将能够正确地确定视图的显示位置。