appCompat v24.0.0上的AppBarLayout高程更改延迟

时间:2016-06-22 06:34:54

标签: android android-elevation appcompat-v7-r24

Appcompat v24.0.0 中,在“活动”可见后,会将阴影/提升呈现为AppbarLayout。在阴影绘图中可以很容易地看到滞后AppbarLayout

以前的Appcompat库版本中没有这种延迟。

使用 Appcompat v24.0.0 Appcompat v23.4.0 进行测试,在新版本中清晰显示阴影图。

4 个答案:

答案 0 :(得分:19)

这是Appcompat v24.0.0 中的错误。

  

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

为了尽量减少elevation绘图的延迟,请在您自己的StateListAnimator中将持续时间设置为 1ms 并将其应用于AppbarLayout

res 目录下的 animator-v21 文件夹中的

appbar_always_elevated.xml

<?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>

答案 1 :(得分:14)

Chris Banes说here

  

StateListAnimator现在拥有所有提升处理。如果你想自己动手,设置一个null StateListAnimator并根据需要调用setElevation()。

因此,如果您的AppBarLayout 不可折叠,您可以使用此功能:

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

答案 2 :(得分:10)

我想这不是一个错误,一个功能。

AppBarLayout的高程动画持续时间由R.integer.app_bar_elevation_anim_duration控制,默认为150

要删除动画,只需执行以下操作即可:

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

答案 3 :(得分:1)

@Vipul Asri给了我们一个很好的答案,但 appbar_always_elevated.xml 应该是 animator-v11 而不是 < em> 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 文件( v21 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">

修改

奇怪的是,如果您使用带有 TabLayout AppbarLayout ,会立即绘制阴影,但请注意,如果您使用的是android:stateListAnimator属性,则此情况,阴影视图有点不同。