视图膨胀缩短了片段动画

时间:2016-11-21 16:31:54

标签: android listview android-fragments android-animation

我有一个Activity,其中包含一堆片段。每个片段都使用滑动动画过渡到下一个片段。

以下是它的构建方式:

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

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

    </RelativeLayout>

所以每个Fragment(nextFragment)都会被推送到fragment_container上:

        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction()
                .setCustomAnimations(R.animator.enter_from_left, R.animator.exit_to_right, R.animator.enter_from_right, R.animator.exit_to_left)
                .replace(R.id.fragment_container, nextFragment);
                .addToBackStack(nextFragment.getFragmentTAG());
                .commit();

到目前为止非常简单。在后堆栈上推送和弹出是没有问题的。

问题

我的问题来自于某些片段包含列表的事实,这些列表在onCreateView()方法中以ListCell视图动态填充。因此,如果我要在片段中显示6个ListCell,我会对6个ListCell视图进行充气,每个视图大约需要45-50毫秒。 知道片段动画需要500毫秒,其中大约一半会丢失这些视图,这最终会产生约250毫秒的动画或更少的动画。

目前,我在LinearLayout内有ScrollView

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <LinearLayout
            android:id="@+id/list_container"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

</ScrollView>

问题

我是否可以通过线程进行处理,或预先对这些视图进行充气以保持动画完整?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以做的是创建一个线程,在将列表项膨胀500ms之前导致延迟。在这个时间过渡动画将完成。现在你可以开始夸大列表项了。 只需在方法中包装listview膨胀代码并在此处调用它:

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
           //inflate the list items here      
        }
    },500);