问题 如何向DialogFragment添加动画?


如何向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

我必须错过一些东西,因为它看起来像以前一样。


8586
2018-02-25 09:34


起源

你的答案在这里: stackoverflow.com/a/13537234/969325。简而言之,你必须破解它的方式,因为没有构建方式。 - Warpzit
可能不是,因为我这样做,它也不适合我:(它改变了布局,但动画不是apear - Csabi
然后我认为你留下了自己的片段,它看起来像一个对话框。 - Warpzit
//根据num选择一种样式。 int style = DialogFragment.STYLE_NO_TITLE; setStyle(style,R.style.MyCustomTheme); - Csabi
像这样我设置了样式和自定义主题,但动画被省略:( - Csabi


答案:


@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 功能。


16
2018-02-26 11:52



你知道在这些动画完成后是否有可能获得回调?我想做一个两部分动画,一个是对话框滑入的动画,然后淡入视图。我将如何获得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,因为你可以使用对话框 getDialog 在任何时候之后 onCreateDialog 被称为。我在打电话给它 onViewCreated 例如。 - sotrh