设置 Android 片段进入和退出过渡?
Setting Android fragment enter and exit transitions?
我正在尝试为 DialogFragment 设置进入和退出过渡,这看起来很简单。这是我的 DrinkDetailActivity 创建对话框的代码:
fab.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//create and display the dialog
DialogFragment orderFragment = new OrderDrinkDialogFragment();
//set the slide transition for the fragment
Transition dialSlide = new Slide();
dialSlide.setDuration(300);
orderFragment.setEnterTransition(dialSlide);
orderFragment.setExitTransition(dialSlide);
orderFragment.show(getFragmentManager(), "order");
}
});
这是我的 OrderDrinkDialogFragment Class:
中的代码
public class OrderDrinkDialogFragment extends DialogFragment
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder builder = new AlertDialog.Builder(DrinkDetailActivity.activity);
//set up the Linear Layout of the dialog
LinearLayout layout = new LinearLayout(DrinkDetailActivity.activity);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setLayoutParams(params);
//set up the EditText view
EditText nameField = new EditText(DrinkDetailActivity.activity);
nameField.setHint(R.string.dialog_name_hint);
//add the EditText view to the layout
layout.addView(nameField, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
//set layout as the view of the dialog
builder.setView(layout);
return builder.create();
}
}
DrinkDetailActivity.activity
只是 this
来自 DrinkDetailActivity
的实例。出于某种原因,当我 show()
它或当它被关闭时,对话框不会转换,它只是弹出和弹出视图。 This 教程在为我的应用程序的其余部分弄清楚 Activity 转换方面提供了很多帮助,并且我按照它所说的相同的片段转换说明进行操作。我做错了什么?
DialogFragment is not just a Dialog but also a Fragment, see Basic Dialog 了解更多使用方法。您在 Fragment 中使用了 onCreateDialog,这可能是导致问题的原因。因此,使用 onCreateView 创建片段对话框视图。
希望这个回答对您有所帮助。
这适用于 me.My 向上滑动动画是
<?xml version="1.0" encoding="utf-8"?> <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" />
</set>
我的幻灯片动画是
<?xml version="1.0" encoding="utf-8"?>
<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" />
</set>
在您的样式中添加这个
<style name="DialogAnimation">
<item name="android:windowEnterAnimation">@anim/slide_up</item>
<item name="android:windowExitAnimation">@anim/slide_down</item>
</style>
现在终于在你的 onCreateDialog()
对话框片段中添加这个
public Dialog onCreateDialog(Bundle savedInstanceState)
{
final Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
return dialog;
}
您需要编写一种样式来在任何 window 上显示动画,例如 Dialog
<style name="AnimDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowAnimationStyle">@style/DialogAnimation</item>
</style>
<style name="DialogAnimation">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
对于你的对话框,你需要像这样实例化
Dialog animatedDialog = new Dialog(MainActivity.this,R.style.AnimDialog);
我正在尝试为 DialogFragment 设置进入和退出过渡,这看起来很简单。这是我的 DrinkDetailActivity 创建对话框的代码:
fab.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//create and display the dialog
DialogFragment orderFragment = new OrderDrinkDialogFragment();
//set the slide transition for the fragment
Transition dialSlide = new Slide();
dialSlide.setDuration(300);
orderFragment.setEnterTransition(dialSlide);
orderFragment.setExitTransition(dialSlide);
orderFragment.show(getFragmentManager(), "order");
}
});
这是我的 OrderDrinkDialogFragment Class:
中的代码public class OrderDrinkDialogFragment extends DialogFragment
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder builder = new AlertDialog.Builder(DrinkDetailActivity.activity);
//set up the Linear Layout of the dialog
LinearLayout layout = new LinearLayout(DrinkDetailActivity.activity);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setLayoutParams(params);
//set up the EditText view
EditText nameField = new EditText(DrinkDetailActivity.activity);
nameField.setHint(R.string.dialog_name_hint);
//add the EditText view to the layout
layout.addView(nameField, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
//set layout as the view of the dialog
builder.setView(layout);
return builder.create();
}
}
DrinkDetailActivity.activity
只是 this
来自 DrinkDetailActivity
的实例。出于某种原因,当我 show()
它或当它被关闭时,对话框不会转换,它只是弹出和弹出视图。 This 教程在为我的应用程序的其余部分弄清楚 Activity 转换方面提供了很多帮助,并且我按照它所说的相同的片段转换说明进行操作。我做错了什么?
DialogFragment is not just a Dialog but also a Fragment, see Basic Dialog 了解更多使用方法。您在 Fragment 中使用了 onCreateDialog,这可能是导致问题的原因。因此,使用 onCreateView 创建片段对话框视图。
希望这个回答对您有所帮助。
这适用于 me.My 向上滑动动画是
<?xml version="1.0" encoding="utf-8"?> <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" />
</set>
我的幻灯片动画是
<?xml version="1.0" encoding="utf-8"?>
<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" />
</set>
在您的样式中添加这个
<style name="DialogAnimation">
<item name="android:windowEnterAnimation">@anim/slide_up</item>
<item name="android:windowExitAnimation">@anim/slide_down</item>
</style>
现在终于在你的 onCreateDialog()
对话框片段中添加这个
public Dialog onCreateDialog(Bundle savedInstanceState)
{
final Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
return dialog;
}
您需要编写一种样式来在任何 window 上显示动画,例如 Dialog
<style name="AnimDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowAnimationStyle">@style/DialogAnimation</item>
</style>
<style name="DialogAnimation">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
对于你的对话框,你需要像这样实例化
Dialog animatedDialog = new Dialog(MainActivity.this,R.style.AnimDialog);