我有一个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>
我是否可以通过线程进行处理,或预先对这些视图进行充气以保持动画完整?
谢谢。
答案 0 :(得分:0)
您可以做的是创建一个线程,在将列表项膨胀500ms之前导致延迟。在这个时间过渡动画将完成。现在你可以开始夸大列表项了。 只需在方法中包装listview膨胀代码并在此处调用它:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//inflate the list items here
}
},500);