0

我有两个FrameLayouts 相互重叠(我们称它们为layout_frontand layout_back,其中每个布局都有多个文本和图像视图)。最初layout_back的可见性设置为消失。

我想要实现的目标:当我想要layout_back显示时,我将其设置为可见,并且我想动画 layout_front 以滑到 layout_back 的底部。效果就像我有两张“卡片”,从前面的卡片上滑下来,在后面显示另一张卡片。

问题:第一个明显的方法是为这样创建一个动画 xml layout_front

<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 值吗?

4

1 回答 1

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();
    }
}
于 2013-05-04T16:36:02.617 回答