一千萬個為什麽

搜索

在運行時更改動畫

我想實現簡單的任務 - 在解除對話之前,我想根據我的邏輯設置不同的關閉動畫(getWindow()。getAttributes()。windowAnimations = ...)。例如,我在對話框上有2個按鈕,如果先按下則我想向左滑動,如果按下第二個則向右滑動。我創建了一些樣式文件,其中包含一些Android動畫:windowExitAnimation和android:windowEnterAnimation,如果在自定義對話框構造函數中傳遞,它們可以工作。但我無法覆蓋代碼中的windowAnimations,因為我不需要使用構造函數方法,因為我需要不同的動畫。怎麽做以及為什麽這段代碼不起作用?

       //close button
        _button_close = (ImageButton)findViewById(R.id.buttonClose);

        if (_button_close != null) 
        {
            _button_close.setOnClickListener(
                new Button.OnClickListener() 
                {  
                    public void onClick(View v)
                    {
                       //set animation
                        getWindow().getAttributes().windowAnimations = R.style.DialogSlideOutLeft;

                       //close form
                        dismiss();
                    }
                }
            );
        }   

最佳答案

我遇到了同樣的問題。 這是我的解決方案:`

        alertCheckIn = new Dialog(this);
        alertCheckIn.setTitle("Check-In");
        alertCheckIn.setContentView(textEntryView); //my custom dialog layout

        lpDialog = alertCheckIn.getWindow().getAttributes();
        lpDialog.windowAnimations = R.style.FadeInDropOutDialogAnimation;
        alertCheckIn.getWindow().setAttributes(lpDialog);

        alertCheckIn.show();

`

然後當我想切換動畫時: `

        lpDialog.windowAnimations = R.style.FadeInSlideLeftOutDialogAnimation;
        alertCheckIn.getWindow().setAttributes(lpDialog);
        alertCheckIn.cancel();`

什麽時候:

private WindowManager.LayoutParams lpDialog;

轉載註明原文: 在運行時更改動畫