我正在尝试让自定义对话框显示为从文本视图向下滑动。这可能吗?我似乎无法将任何动画应用于对话框类。我在构造函数中尝试过这一行,但它没有效果:
this.getWindow()setWindowAnimations(R.anim.paranimation);
我甚至不确定动画是否正确,但是一旦我看到它正在做什么,我就能调整它。为了完整起见,我会在下面列出它。我不是在寻找实际动画的帮助,只是寻找对话框的应用程序。
paranimation.xml:
<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-200%"
android:toXDelta="0%"
android:fromYDelta="200%"
android:toYDelta="0%"
android:duration="3000"
android:zAdjustment="top">
</translate>
答案 0 :(得分:199)
我今天一直在努力使用Dialog动画,最后让它使用样式,所以这是一个例子。
首先,最重要的事情 - 我今天可能有5种不同的方式工作,但无法分辨,因为......如果您的设备动画设置设置为“无动画”(设置→显示→动画),那么无论你做什么,对话框都不会动画!
以下是styles.xml的精简版本。希望它是不言自明的。这应该位于res/values
。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="PauseDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item>
</style>
<style name="PauseDialogAnimation">
<item name="android:windowEnterAnimation">@anim/spin_in</item>
<item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
</style>
</resources>
windowEnterAnimation
是我的动画之一,位于res\anim
。
windowExitAnimation
是Android SDK中的动画之一。
然后,当我在我的活动onCreateDialog(int id)
方法中创建对话框时,我会执行以下操作。
Dialog dialog = new Dialog(this, R.style.PauseDialog);
// Setting the title and layout for the dialog
dialog.setTitle(R.string.pause_menu_label);
dialog.setContentView(R.layout.pause_menu);
或者,您可以通过以下方式设置动画,而不是使用带有主题的Dialog构造函数。
Dialog dialog = new Dialog(this);
dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation;
答案 1 :(得分:47)
我使用ChrisJD代码为Dialogbox创建了淡入和淡出动画。
在res / style.xml里面
<style name="AppTheme" parent="android:Theme.Light" />
<style name="PauseDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item>
</style>
<style name="PauseDialogAnimation">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
anim / fadein.xml内部
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
在anim / fadeut.xml内
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/anticipate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
MainActivity
Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog);
答案 2 :(得分:16)
从右到左(条目动画)和从左到右(退出动画):
styles.xml:
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item>
</style>
<style name="CustomDialogAnimation">
<item name="android:windowEnterAnimation">@anim/translate_left_side</item>
<item name="android:windowExitAnimation">@anim/translate_right_side</item>
</style>
在res / anim /中创建两个文件:
translate_right_side.xml:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="600"/>
translate_left_side.xml:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="600"
android:fromXDelta="100%"
android:toXDelta="0%"/>
在你片段/活动中:
Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog);
答案 3 :(得分:11)
我遇到了同样的问题,但最后我按照跟进的方式解决了问题
((ViewGroup)dialog.getWindow().getDecorView())
.getChildAt(0).startAnimation(AnimationUtils.loadAnimation(
context,android.R.anim.slide_in_left));
答案 4 :(得分:3)
首先,您必须在res / anim中创建两个动画资源
slide_up.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromydelta="100%"
android:interpolator="@android:anim/accelerate_interpolator"
android:toxdelta="0">
</translate>
slide_bottom.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromydelta="0%p"
android:interpolator="@android:anim/accelerate_interpolator"
android:toydelta="100%p">
</translate>
然后您必须创建样式
<style name="DialogAnimation">
<item name="android:windowEnterAnimation">@anim/slide_up</item>
<item name="android:windowExitAnimation">@anim/slide_bottom</item>
</style>
并将此行添加到您的班级
dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; //style id
基于http://www.devexchanges.info/2015/10/showing-dialog-with-animation-in-android.html
答案 5 :(得分:0)
尝试以下代码:
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// set transparent in window background
View _v = inflater.inflate(R.layout.some_you_layout, container, false);
//load animation
//Animation transition_in_view = AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_in);// system animation appearance
Animation transition_in_view = AnimationUtils.loadAnimation(getContext(), R.anim.customer_anim);//customer animation appearance
_v.setAnimation( transition_in_view );
_v.startAnimation( transition_in_view );
//really beautiful
return _v;
}
创建自定义动画:res / anim / customer_anim.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromYDelta="100%"
android:toYDelta="-7%"/>
<translate
android:duration="300"
android:startOffset="500"
android:toYDelta="7%" />
<translate
android:duration="200"
android:startOffset="800"
android:toYDelta="0%" />
</set>