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

Vip*_*sri 9 android android-appcompat android-elevation

Appcompat v24.0.0中,在Activity可见之后导致阴影/高程渲染AppbarLayout.在阴影绘图中可以很容易地看到滞后AppbarLayout.

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

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

Vip*_*sri 21

这是一个错误Appcompat v24.0.0.

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

为了在最小延迟elevation图,时间设置为1ms的在自己StateListAnimator和运用它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>
Run Code Online (Sandbox Code Playgroud)

在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>
Run Code Online (Sandbox Code Playgroud)


Eug*_*nec 15

克里斯巴恩斯在这里说:

StateListAnimator现在拥有所有高程处理.如果您想自己动手,请设置null StateListAnimator并根据需要调用setElevation().

所以,如果你AppBarLayout不可折叠的,你可以这样做:

<android.support.design.widget.AppBarLayout
    android:stateListAnimator="@null"
    android:elevation="@dimen/design_appbar_elevation">
Run Code Online (Sandbox Code Playgroud)


Yoo*_*Yoo 10

我想这不是一个bug,一个功能.

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

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

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