【问题标题】:Android - How to interact with a view after it has been animated?Android - 动画后如何与视图交互?
【发布时间】:2012-05-09 09:26:44
【问题描述】:

我有一个使用TranslateAnimation 动画的视图:

TranslateAnimation translateAnim = new TranslateAnimation(fromX, toX, fromY, toY);
translateAnim.setDuration(SLIDING_SPEED);
translateAnim.setInterpolator(new BounceInterpolator());
translateAnim.setFillAfter(true);
mSlidingView.startAnimation(translateAnim);

动画效果很好,但完成后我不能再点击视图了。相反,我仍然可以点击它之前的位置。

我在 StackOverflow 上搜索过类似的问题(hereherehere),但没有一个提供任何解决方案。我听说ObjectAnimator 解决了这个问题,但是我可以使用以前的 API 做些什么吗? (我不想依赖像 NineOldAndroids 这样的另一个第三方库来支持 pre-honeycomb 设备上的新动画 API)。哦,我已经尝试invalidate 视图,但它并没有改变任何东西。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: android android-animation


    【解决方案1】:

    好吧,我想没有链接,但你试过了吗: (在 setFillAfter 之前)

    translateAnim.setFillEnabled(true);
    

    【讨论】:

    • 你使用什么视图组? (我的意思是,您的视图在哪种布局中进行翻译?)
    • 哼,看这个link
    • 作为一种解决方法,您可以通过动画侦听器的 onAnimationEnd 方法中的 setLayoutParams 设置视图的新位置。这很脏,但可以解决问题
    • 是的,正如我的问题中提到的,这家伙建议使用新的 API,但我不想(除非我真的别无选择) . SlidingDrawer 也不适合我想要实现的目标。
    • 对于您的解决方法,确实可能是一个解决方案。让我试试:)
    【解决方案2】:

    API 11+ 中,我们可以通过 ObjectAnimator 类来做到这一点。

    API 10-中,当我们翻译视图时,视觉视图将被翻译,但物理位置仍然在旧位置,在完成动画后更改翻译视图的边距可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-21
      • 2016-10-03
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 2012-12-14
      • 1970-01-01
      相关资源
      最近更新 更多