2

這很奇怪,但我從來沒有見過有關如何在正確的時間執行動畫的文件,以便在活動的生命週期正在進行時能夠順利地看到它們。何時在活動生命週期中啓動動畫?

例如,如果你開始動畫onCreate那麼你甚至不會看到它發生。

此外,如果活動A與startActivityForResult開始活動B,你要開始一個動畫onActivityResult(對用戶的選擇),然後再一次看不到任何東西,因爲從活動B到活動一個過渡需要一定的時間。

在這些情況下,我們如何知道何時開始動畫?我現在對onActivityResult案件更感興趣。

另外我們如何才能知道一般情況下,如果一個視圖可以真正執行一個用戶將實際看到的動畫?

+0

還有一個回調:[onEnterAnimationComplete()](https://developer.android.com/reference/android/app/Activity.html#onEnterAnimationComplete())。這是否適用於您的動畫? – 0X0nosugar

+0

我也嘗試過,它確實是開始動畫的最佳時機...壞的是,在我測試過的一些Sumsung設備上,它永遠不會被調用(再次感謝三星)。此外,onResume案例將保持未解決 – Anonymous

+0

如果它不保證被調用,那麼它不是真的有用:( – 0X0nosugar

回答

0

您正在尋找onResume

Quote from Android docs:

onRestoreInstanceState(包)後調用,onRestart(),或在onPause(),爲您的活動啓動與用戶交互。這是開始動畫,打開獨佔訪問設備(如攝像機)的好地方,等

在同一個文檔,你還可以找到關於如何檢查是否顯示活動的方式:

請記住,onResume不是您的活動對用戶可見的最佳指標;系統窗口(如鍵盤)可能在前面。使用onWindowFocusChanged(boolean)可以確定您的活動對用戶是可見的(例如,恢復遊戲)。

+0

正如你指出你的自我onResume不是一個好的選擇...我嘗試了WindowFocusChanged以及同樣的事情發生。動畫的第一步 – Anonymous

+0

不,'onResume'是開始動畫的最佳位置,它不能保證如果在恢復被調用時,活動是完全可見的。如果這些東西仍然不起作用,或許你可以分享你想要達到的效果和不起作用的東西,因爲我們無法真正看到你的動畫中發生了什麼 –

0

對於標準流程onResume()可能被認爲是啓動動畫的好處。但是如果你有其他用例,那麼你可以啓動延遲動畫開始到下一幀,在那裏一切都已經(希望)已經設置好了。

這可以通過Handler類完成。

 

    new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      // start animation 
     } 
    }); 
 

使用這種技術可以延遲動畫來自onCreate()onActivityResult()開始。

+0

onResume在大約與Activity過渡同時被調用動畫開始。因此,啓動一個動畫不起作用(因爲我測試過),因爲活動轉換仍在進行。該動畫未嘗試它的第一步。當然,我可以設置startOffset,但這不是一個優雅的解決方案。 – Anonymous

+0

如果您有一個活動轉換,那麼您可以設置一個點擊監聽器,一旦轉換結束 - 只需開始動畫。 'getWindow()。getExitTransition()。addListener(... onTransitionEnd(){...})' – azizbekian

+0

我知道這一點,但這可以從API 21及以上版本獲得。目前,大約有25%的Android用戶低於21位。所以這不是一個可行的解決方案 – Anonymous