在程序兼容性v24.0.0原因渲染陰影/仰角至AppbarLayout
後活動是可見的。在陰影繪製到AppbarLayout
時可以容易地看到滯後。AppBarLayout高度變化被延遲上程序兼容性v24.0.0
而之前的Appcompat庫版本中沒有這種延遲。
同時使用程序兼容性v24.0.0和程序兼容性v23.4.0,影子清楚地看到,在新版本的繪圖測試。
在程序兼容性v24.0.0原因渲染陰影/仰角至AppbarLayout
後活動是可見的。在陰影繪製到AppbarLayout
時可以容易地看到滯後。AppBarLayout高度變化被延遲上程序兼容性v24.0.0
而之前的Appcompat庫版本中沒有這種延遲。
同時使用程序兼容性v24.0.0和程序兼容性v23.4.0,影子清楚地看到,在新版本的繪圖測試。
這是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>
@JoaoSousa回答更新您的建議。我在放置狀態列表動畫器時也得到了同樣的錯誤,所以我放置了「animator-v21」,並且像一個消除錯誤的魅力一樣工作。 –
@Vipul Asri因此,如果放置狀態列表動畫的正確文件夾是「anim-v21」,它爲什麼會顯示錯誤?我應該在哪裏放? –
@ItielMaimon如果顯示錯誤,它在運行時仍然可以正常工作。但是如果你想刪除這個錯誤,只需將你的'anim-v21'重構爲'animator-v21'。截至目前,選擇器標籤在'anim-v21'中不可識別。 –
克里斯·巴內斯說here:
的StateListAnimator現在擁有的所有海拔處理。如果您想自己動手,請設置一個null StateListAnimator並根據需要調用setElevation()。
因此,如果您AppBarLayout
是不可摺疊您可以使用此:
<android.support.design.widget.AppBarLayout
android:stateListAnimator="@null"
android:elevation="@dimen/design_appbar_elevation">
這應該是被接受的答案。它使設計24.0.0的行爲像它的舊版本。 –
@MarcelWesołowski僅當您不使用CollapsibleToolbarLayout。 –
@EugenPechanec我正在使用'CollapsibleToolbarLayout',它工作正常。這應該被接受的答案。 – Sandak
@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文件(AppbarLayout在v21文件夾與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">
編輯
奇怪的是,如果你正在使用AppbarLayout與TabLayout,陰影是立即繪製的,但請注意,如果您使用android:stateListAnimator屬性這種情況下,陰影視圖有點不同。
我想這不是一個bug,一個功能。
AppBarLayout的高程動畫持續時間由R.integer.app_bar_elevation_anim_duration
控制,默認爲150
。
要刪除的動畫,只是做以下就是這樣:
<integer name="app_bar_elevation_anim_duration" tools:override="true">0</integer>
什麼是你對StackOverflow的社會問題?也許你應該爲appcompat團隊提交一份錯誤報告。 – Budius