我对Android中的动画有几个问题。这就是我所处的情况。我有3个布局(顶部,中部和底部),但只有一个是可见的(中间一个)。每隔2秒我需要为这三个布局设置动画,使底部一个成为中间,中间一个成为顶部。正在进行一种自动收报机动画(底部布局“推出”顶部,中间布局成为顶部布局)。
这是我的xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<include
layout="@layout/ticker_row"
android:id="@+id/ticker_item_top"
android:layout_centerVertical="true"
/>
<include
layout="@layout/ticker_row"
android:id="@+id/ticker_item_middle"
/>
<include
layout="@layout/ticker_row"
android:id="@+id/ticker_item_bottom"
android:layout_centerVertical="true"
/>
</RelativeLayout>
BTW:我以编程方式使用填充和重力将布局设置为正确的位置(没有找到任何其他解决方案):
itemTop.setGravity(Gravity.TOP);
itemTop.setPadding(0, -30, 0, 0);
itemMiddle.setGravity(Gravity.CENTER);
itemBottom.setGravity(Gravity.BOTTOM);
itemBottom.setPadding(0, 60, 0, 0);
所以我在片段中有3个布局。只有一个可见(中间一个)。当我为它们制作动画并且底部变为中间时,它不会被完全绘制(仅在第一个位置可见的部分)。这是我的动画:
Animation animation = new TranslateAnimation
(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -0.75f);
animation.setFillAfter(true);
animation.setDuration(500);
animation.setAnimationListener(animListener);
animation.setInterpolator(new AccelerateInterpolator(1.0f));
itemTop.startAnimation(animation);
itemMiddle.startAnimation(animation);
itemBottom.startAnimation(animation);
我尝试在布局上使用refreshDrawableState
和invalidate
方法,但它没有帮助。
我得到的第二个问题是如何在动画后改变布局的位置?它是我想要它的当场,但如果我再次运行动画,它将从它使用的地方动画布局,而不是它现在的那个。我尝试过使用item.layout
方法,但我不确定应该放哪些参数。
我希望我能够很好地解释我的情况,但如果还有任何问题,我会很乐意回答。
干杯,
马里奥