如何给DialogFragment添加动画?

12
我可以帮助您翻译以下内容:如何向DialogFragment添加动画。我的动画包括:
退出动画:
<scale
    android:duration="200"
    android:fillAfter="false"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="-90%"
    android:startOffset="200"
    android:toXScale="0.5"
    android:toYScale="0.5" />

<translate
    android:duration="300"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="-200"
    android:toYDelta="-200" />

在动画中:

<scale
    android:duration="200"
    android:fillAfter="false"
    android:fromXScale="0.5"
    android:fromYScale="0.5"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="-90%"
    android:toXScale="1.0"
    android:toYScale="1.0" />

<translate
    android:duration="300"
    android:fromXDelta="-200"
    android:fromYDelta="-200"
    android:toXDelta="0"
    android:toYDelta="0" />

和我的代码:

FragmentTransaction ft = getFragmentManager().beginTransaction();
                ft.setCustomAnimations(R.anim.jump_in, R.anim.jump_out, R.anim.jump_in, R.anim.jump_out);
                ft.add(layer_frag, "layer frag");
                ft.show(layer_frag).commit();//layer_frag is a class whitch extends DialogFragment

我一定错过了什么,因为它看起来和之前一样。


你的答案在这里:https://dev59.com/uGYr5IYBdhLWcg3wxM-8#13537234。简而言之,由于没有内置的方法,你必须通过一些技巧来解决它。 - Warpzit
可能不行,因为我也试过了,但是它对我也没有用 :( 它改变了布局,但动画没有出现。 - Csabi
那么我认为你只能创建自己的Fragment,使其呈现为对话框。 - Warpzit
// 根据num选择风格。 int style = DialogFragment.STYLE_NO_TITLE; setStyle(style, R.style.MyCustomTheme); - Csabi
我已经设置了样式和自定义主题,但动画还没有完成 :( - Csabi
1个回答

23
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) 
{
    final Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.getWindow().getAttributes().windowAnimations = R.style.detailDialogAnimation;
    return dialog;
}

答案来自stackoverflow.com/a/13537234/969325,但您必须在onCreateDialog函数中设置样式。

你知道是否有可能在这些动画完成时获取回调吗?我想做一个两部分的动画,一部分是对话框滑入,另一部分是淡入视图。如何将监听器附加到windowAnimations? - android_student
setAnimationListener(new AnimationListener() {public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } public void onAnimationEnd(Animation animation) { ladder.startAnimation(toRight); }}); - Csabi
你不必在 onCreateDialog 中设置样式,因为你可以在 onCreateDialog 被调用后的任何时间使用 getDialog 获取对话框。例如,我在 onViewCreated 中调用它。 - sotrh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接