【问题标题】:Android transformation animation changes default locationAndroid 变换动画更改默认位置
【发布时间】:2013-12-01 18:46:03
【问题描述】:

我有更改视图位置的触摸事件(图片拖放)

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);

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

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

感谢您的宝贵时间。

【问题讨论】:

    标签: android animation translate-animation


    【解决方案1】:

    TranslateAnimation 是视图动画,与属性动画相反。区别在这些文档中定义,包含的 sn-p:

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

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

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

    另一方面,属性动画确实会影响视图的属性,并且可能是您想要使用的。尝试用以下 sn-p 替换您的 TranslateAnimation:

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

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

    【讨论】:

    • 谢谢!这澄清和解释了很多!
    猜你喜欢
    • 1970-01-01
    • 2017-07-19
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多