在动画完成之前调用片段onDestroyView()

时间:2013-07-05 02:51:40

标签: android android-fragments

应客户要求,我试图使用Android的FragmentManager / FragmentTransaction模拟“iOS UINavigationController风格”从右向左推送,从左到右的流行动画框架和setCustomAnimations()方法来实现过渡动画。

一切都运行良好,除非从后面的堆栈中弹出一个片段 - 正在弹出的片段上立即调用onDestroyView(),片段的子视图会立即从布局中删除。

这意味着在前面的片段完成动画进入视图之前会出现黑色闪烁(弹出片段的背景颜色),这有点难看。

关于如何在转换动画完成之前强制弹出片段保留视图层次结构的任何想法?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。

我发现onstoryview()在动画开始时被调用,而ondestory()在完成时被调用。

所以我将一些代码从ondestoryview()移到了ondestory()。

另一个解决方案: 在onDestoryView()中添加这些代码:

View v = getView();
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getWidth(), v.getHeight());
v.draw(c);
BitmapDrawable bd = new BitmapDrawable(ProviderFactory.getContext().getResources(), b);
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    getActivity().findViewById(R.id.fragment_container).setBackgroundDrawable(bd);
} else {
    getActivity().findViewById(R.id.fragment_container).setBackground(bd);
}