我有两个FrameLayout
s彼此重叠(我们称之为layout_front
和layout_back
,其中每个布局都有多个文字和图片视图)。最初layout_back
的可见性已设置为已消失。
我想要实现的目标:当我希望显示layout_back
时,我将其设置为可见,并且我想要将layout_front设置为动画以向下滑动到layout_back的底部。效果就像我有两张“卡片”,向下滑动前卡以显示后面的另一张卡片。
问题:第一个明显的方法是为layout_front
创建一个动画xml,如下所示:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="400"
android:fillAfter="true"
android:fromYDelta="0%"
android:toYDelta="100%" />
</set>
1)我的第一个问题是,layout_front
在动画后不会停留在那里,但会在翻译后立即弹回原来的位置。我应该怎么做才能让它在滑下后保持?
2)我的第二个问题更严重。 layout_front
滑动的距离(layout_back
的高度)直到运行时才确定。有没有办法动态设置YDelta值?
答案 0 :(得分:0)
我自己回答这个问题。布局看起来像这样:
<RelativeLayout
android:id="@+id/pair_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<FrameLayout
android:id="@id/layout_back"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/list_background"
android:visibility="gone" >
<TextView
android:id="@id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</FrameLayout>
<FrameLayout
android:id="@id/layout_front"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background">
<Button
android:id="@id/button_blue"
android:layout_width="wrap_content"
android:layout_height="match_parent" >
</Button>
</FrameLayout>
</RelativeLayout>
后面的布局由textview组成,而前面的布局是一个按钮。单击该按钮时,它将滑动到textview的底部。按钮侦听器的实现方式如下:
public class ButtonListener implements OnClickListener {
final FrameLayout l_front;
final FrameLayout l_back;
public blueListener(FrameLayout f, FrameLayout b) {
this.l_back = b;
this.l_front = f;
}
@Override
public void onClick(View v) {
l_back.setVisibility(View.VISIBLE);
l_back.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
l_front.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
TranslateAnimation tanim = new TranslateAnimation(
TranslateAnimation.ABSOLUTE, 0.0f,
TranslateAnimation.ABSOLUTE, 0.0f,
TranslateAnimation.ABSOLUTE, 0.0f,
TranslateAnimation.ABSOLUTE, l_back.getMeasuredHeight());
tanim.setDuration(400);
tanim.setFillAfter(true);
tanim.setInterpolator(new DecelerateInterpolator());
l_front.setAnimation(tanim);
((RelativeLayout)l_front.getParent()).getLayoutParams().height
= l_back.getMeasuredHeight() + l_front.getMeasuredHeight();
}
}