我正在测试一个功能,我希望从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();