簡體   English   中英

設置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類的代碼:

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()它或它被解除時,對話框不會轉換,它只是彈出和退出視圖。 教程幫助我了解了應用程序其余部分的Activity轉換,並按照相同的說明進行了片段轉換。 我究竟做錯了什么?

這對我有用。我向上滑動動畫是

<?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()的Dialog片段添加這個

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

您需要在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不僅是一個Dialog,也是一個Fragment ,有關如何使用它的詳細信息,請參閱基本對話框 您在Fragment中使用了onCreateDialog,這可能是導致問題的原因。 因此,使用onCreateView創建片段對話框視圖。

希望這個答案可以幫到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM