苦苦挣扎着观看动画

时间:2011-02-22 01:54:00

标签: android android-layout

我有一个绝对的布局。在该布局中是一个自定义视图,占据屏幕的左三分之一。我在布局中放了一个按钮,我想让自定义视图在屏幕上滑动和关闭。我已尝试在自定义视图中使用动画资源(翻译...“slidein”和“slideout”)和函数startAnimation,但我无法获得我正在寻找的行为。

好的......我从自定义视图开始可见,在onCreate中我找到了视图,并使用我的幻灯片动画将其设置为屏幕外的动画。这很好。我想我需要在动画中设置“fillAfter”,以便自定义视图不在屏幕上。

现在,当我按下我的按钮时,我想让自定义视图在屏幕上向后滑动,所以我再次使用startAnimation触发我的slidein动画,但是使用了slidein。但是......导致视图首先跳回到原来的位置然后向右滑动......导致它在屏幕中间完成。

如何让动画将视图的当前位置用作动画起始位置,而不是原始位置?

由于

2 个答案:

答案 0 :(得分:2)

我也遇到了这个问题中描述的闪烁。我的解决方案是使用改进的Honeycomb动画API。有一个方便的库可以将这些文件一直移植回Android 1.0:

http://nineoldandroids.com/

有关Honeycomb Animation API的更多信息,请参阅: http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html

在我的情况下,我在RelativeLayout中有2个重叠的LinearLayouts。我想将顶部的LinearLayout从屏幕上移开并显示下面的LinearLayout。然后我想将屏幕上的LinearLayout滑回到其原始位置,以便顶部布局再次覆盖底部布局。使用旧的动画API,我在第二个动画(屏幕外 - >屏幕上)开始之前看到了一个闪烁。

使用新的API,这项任务变得微不足道了:

// Slide out (add to button handler)
ObjectAnimator.ofFloat(mTopLayout, "translationY", mTopLayout.getHeight()).start();

// Slide back in  (add to button handler)
ObjectAnimator.ofFloat(mTopLayout, "translationY", 0).start();

Honeycomb Animation API实际上会在屏幕上移动对象(而不是假装像旧动画API一样移动它们),因此不需要使用filleAfter,fillBefore等来愚弄。

答案 1 :(得分:1)

查看设置fillAfter属性以保持结束动画状态