在ScrollView中为RelativeLayout设置动画

时间:2015-05-22 07:33:50

标签: android android-animation android-scrollview android-relativelayout

我正在测试一个功能,我希望从ScrollView中为视图设置动画。我认为提供一个样本布局会更容易理解,所以在这里:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@android:color/holo_blue_bright"
        >

        <TextView
            android:id="@+id/tv_label"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="0"
            android:textSize="25sp"
            android:textStyle="bold"/>
    </LinearLayout>

    <ScrollView
        android:id="@+id/scroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:background="@android:color/holo_green_light"
        android:padding="5dp"
        >

        <RelativeLayout
            android:id="@+id/lay_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/iv_1"
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:background="@android:color/holo_purple"/>

            <ImageView
                android:id="@+id/iv_2"
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:layout_below="@+id/iv_1"
                android:layout_marginTop="10dp"
                android:background="@android:color/holo_blue_dark"/>

            <ImageView
                android:id="@+id/iv_3"
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:layout_below="@+id/iv_2"
                android:layout_marginTop="10dp"
                android:background="@android:color/holo_green_dark"/>

            <ImageView
                android:id="@+id/iv_4"
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:layout_below="@+id/iv_3"
                android:layout_marginTop="10dp"
                android:background="@android:color/holo_red_light"/>

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:layout_below="@+id/iv_4"
                android:layout_marginTop="10dp"
                android:background="@android:color/white"/>

            <FrameLayout
                android:id="@+id/bottom_buttons"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <FrameLayout
                    android:id="@+id/frame_cart"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="130dp">

                    <Button
                        android:id="@+id/btn_cart"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="end"
                        android:background="@android:color/holo_orange_dark"/>
                </FrameLayout>
            </FrameLayout>

        </RelativeLayout>
    </ScrollView>
</LinearLayout>

总结一下:主父是一个LinearLayout,包含一个标题(另一个LinearLayout)和一个ScrollView。在这个ScrollView中,我得到了一堆视图,在它们上面,还有另一个View(在这个测试用例中包含一个Button的FrameLayout),我想稍后制作动画。

问题是(或者至少我想到的):不知何故,RelativeLayout的高度计算为包装内容,并且将View设置为屏幕底部的动画将不会显示它,因为它超出了它的范围父计算高度。

如果它是相关的,这是我点击按钮时被激活的测试动画:

 AnimatorSet animSet = new AnimatorSet();
        ObjectAnimator animToBottom = ObjectAnimator.ofFloat(frameCart, "translationY", 200);
        animSet.play(animToBottom);
        animSet.setDuration(300);
        animSet.start();

0 个答案:

没有答案