2015-09-30 91 views
1

是否可以對RecyclerView高度進行動畫設置,或者以編程方式更改它?例如,如果我有一個較大的標題視圖,有時可以看到,而其他時間則不是 - 我想要爲RecyclerView高度設置動畫效果,以在標題動畫出來時填充屏幕。Animate RecyclerView高度

更改LayoutParams.height似乎不起作用。 LinearLayout animateLayoutChanges導致崩潰。

<LinearLayout> 
    <RelativeLayout (header)> 
    <RecyclerView> 
</LinearLayout> 

我想讓RelativeLayout的動畫出前(translationY),然後在同一時間做出recyclerview動畫長高,以適應。

+0

您可以發佈一些用於解決問題的代碼嗎?當內容發生變化時,我需要更改RecyclerView的高度,但我不會在何處開始動畫。 [這是我的問題](http://stackoverflow.com/questions/38134727/how-to-animate-recyclerview-height-before-items-are-shown) –

回答

1

有解決這一可能的選項:從@Ari

  1. 關注的建議,開始動畫和動畫的每一個刻度更新佈局PARAMS。這會使回收站視圖的大小發生變化。然而,從績效的角度來看,這是一個可怕的想法。佈局和測量過程相當昂貴,所以一般情況下您想要最小化觸發佈局的調用。呼籲setLayoutParams將觸發佈局&爲RecyclerView +所有子女測量過程,這意味着,每一個幀上,你會做真的很貴工作,這很可能會導致framedrop和糟糕的用戶體驗

  2. 有但另一種方式。它可能無法在所有情況下工作 - 這一切都取決於您的最終佈局,但仍然這就是我會推薦的。這個想法 - 在開始動畫之前讓您的recyclerView更高。不過,它需要一些高級的Android技能。基本上你需要重寫你的RecyclerView中的onMeasure & layout方法(你實際上需要擴展RecyclerView類來做到這一點)。

    • 您可以介紹一些標誌,你recyclerView本身測量位比正常高(多麼高得多 - 你的頭視圖的確切高度)
    • 當你需要動畫標題出來
    • - 你的標誌設置true並請求新的佈局。這將重新佈置recyclerView,底部有一些不可見的部分。
    • 現在,您只需對兩個RecyclerView &標題的翻譯進行動畫處理即可使標題移出屏幕並使回收站視角更高。這將使用戶感覺像recyclerview「擴展」
    • 一旦動畫完成 - 自定義標記設置爲false,你的頭GONE的變化知名度,因爲它是關閉屏幕現在

下面是一些有關實施自定義onMeasure邏輯的信息: https://medium.com/android-news/perfmatters-introduction-to-custom-viewgroups-to-improve-performance-part-2-f14fbcd47c

+0

選項#2是我最終做的。自定義佈局在測量之前移動它的孩子 - 讓我根據需要改變高度。太糟糕了,這很難! –

+0

是啊...「成長」的動畫總是在Android的屁股疼痛:( –

相關問題