2016-06-22 27 views
8

程序兼容性v24.0.0原因渲染陰影/仰角AppbarLayout後活動是可見的。在陰影繪製到AppbarLayout時可以容易地看到滯後。AppBarLayout高度變化被延遲上程序兼容性v24.0.0

而之前的Appcompat庫版本中沒有這種延遲。

同時使用程序兼容性v24.0.0程序兼容性v23.4.0,影子清楚地看到,在新版本的繪圖測試。

+0

什麼是你對StackOverflow的社會問題?也許你應該爲appcompat團隊提交一份錯誤報告。 – Budius

回答

18

這是Appcompat v24.0.0中的一個錯誤。

參考文獻:https://code.google.com/p/android/issues/detail?id=213895

爲了在elevation繪圖的延遲減到最小,在你自己的StateListAnimator設定的持續時間1ms的並將其應用到AppbarLayout

appbar_always_elevated.xml動畫-V21文件夾下資源目錄。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item> 
     <objectAnimator android:propertyName="elevation" 
         android:valueTo="8dp" 
         android:valueType="floatType" 
         android:duration="1"/> 
    </item> 

</selector> 

在AppbarLayout:

<android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:fitsSystemWindows="true" 
     android:stateListAnimator="@animator/appbar_always_elevated" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

</android.support.design.widget.AppBarLayout> 
+0

@JoaoSousa回答更新您的建議。我在放置狀態列表動畫器時也得到了同樣的錯誤,所以我放置了「animator-v21」,並且像一個消除錯誤的魅力一樣工作。 –

+0

@Vipul Asri因此,如果放置狀態列表動畫的正確文件夾是「anim-v21」,它爲什麼會顯示錯誤?我應該在哪裏放? –

+0

@ItielMaimon如果顯示錯誤,它在運行時仍然可以正常工作。但是如果你想刪除這個錯誤,只需將你的'anim-v21'重構爲'animator-v21'。截至目前,選擇器標籤在'anim-v21'中不可識別。 –

10

克里斯·巴內斯說here

的StateListAnimator現在擁有的所有海拔處理。如果您想自己動手,請設置一個null StateListAnimator並根據需要調用setElevation()。

因此,如果您AppBarLayout不可摺疊您可以使用此:

<android.support.design.widget.AppBarLayout 
    android:stateListAnimator="@null" 
    android:elevation="@dimen/design_appbar_elevation"> 
+0

這應該是被接受的答案。它使設計24.0.0的行爲像它的舊版本。 –

+0

@MarcelWesołowski僅當您不使用CollapsibleToolbarLayout。 –

+0

@EugenPechanec我正在使用'CollapsibleToolbarLayout',它工作正常。這應該被接受的答案。 – Sandak

0

@Vipul阿斯里給了我們一個很好的答案,但appbar_always_elevated.xml應進animator- v11而不是animator-v21文件夾。具有AppbarLayout的佈局應該位於v21文件夾中。

彙總,結構是這樣的:

-res 
    -animator-v11 
     -appbar_always_elevated.xml 
    -layout 
     -a_layout_wich_has_the_appbarlayout.xml 
    -layout-v21 
     -a_layout_wich_has_the_appbarlayout.xml 

注意,有兩個a_layout_wich_has_the_appbarlayout。xml文件(AppbarLayoutv21文件夾與android:stateListAnimator屬性和在一個非v21文件夾沒有此屬性)。

請看:

在非V21佈局文件夾:

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

而且,在V21佈局文件夾:

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:stateListAnimator="@animator/appbar_always_elevated"> 

編輯

奇怪的是,如果你正在使用AppbarLayoutTabLayout,陰影是立即繪製的,但請注意,如果您使用android:stateListAnimator屬性這種情況下,陰影視圖有點不同。

7

我想這不是一個bug,一個功能。

AppBarLayout的高程動畫持續時間由R.integer.app_bar_elevation_anim_duration控制,默認爲150

要刪除的動畫,只是做以下就是這樣:

<integer name="app_bar_elevation_anim_duration" tools:override="true">0</integer>

+0

同意,如果它是一個錯誤,他們應該解決這個問題,當新版本的appcompat lib版本,我使用25.1.1,仍然有緩慢的問題。大聲笑 – BennyKok

+0

這絕對應該被接受爲一個正確的答案 – daxh