Android 折叠工具栏布局:与Facebook类似的自定义contentScrim

Android 折叠工具栏布局:与Facebook类似的自定义contentScrim,android,android-collapsingtoolbarlayout,android-appbarlayout,Android,Android Collapsingtoolbarlayout,Android Appbarlayout,我想为我的折叠工具栏布局创建一个自定义contentScrim。我的折叠工具栏布局内部有一个imageview。当它滚动时,理论上,imageview应该淡出,而我的scrim颜色应该淡入 我们都知道我们可以创建一个这样的scrim: <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar"

我想为我的
折叠工具栏布局
创建一个自定义contentScrim。我的折叠工具栏布局内部有一个
imageview
。当它滚动时,理论上,imageview应该淡出,而我的scrim颜色应该淡入

我们都知道我们可以创建一个这样的scrim:

            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsing_toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:contentScrim="?attr/colorPrimary"
                android:background="@color/white"
                app:expandedTitleMarginStart="48dp"
                app:expandedTitleMarginEnd="64dp"
                android:fitsSystemWindows="true"
                app:expandedTitleTextAppearance="@color/transparent"
                app:layout_scrollFlags="scroll|exitUntilCollapsed"
                >
framelayout由Background
imageview
组成,它保存在我的折叠工具栏布局中显示的图片,在它前面是一个imageview,它只保存“scrimColor”?attr/colorPrimary,alpha为0,以便Background
imageview
将发光

然后我实现了appBarLayout的onOffsetChangedListener:

@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {

    fading_backdrop.setImageAlpha(verticalOffset);
    fading_backdrop.invalidate();
}
我们正在设置渐弱背景的alpha,以便在向上滚动时显示。我正试图人工创建一个scrim


然而,这似乎不能正常工作。当我运行这段代码时,根本没有褪色。有人知道我做错了什么吗?

这就是我如何创建一个自定义scrim的方法,它现在似乎在很多应用程序中使用-如果你看看Facebook,你会发现他们没有使用标准的
contentScrim
作为他们的
折叠工具栏布局。下面的代码与Facebook在其应用程序中所做的相同

您必须将
AppBarLayout.OnOffsetChangedListener
设置为活动,然后使用以下代码测量工具栏的大小和AppBarLayout的大小

调用侦听器时,
垂直偏移量
实际上测量了从完全展开到接触固定的
工具栏
折叠工具栏布局
的偏移量。因此,
verticalOffset
排除了
工具栏的高度。要将苹果与苹果进行比较,我们还需要从
appBarLayout
的高度中排除
工具栏
高度,这样当我们将
垂直偏移量
除以
总高度
时,垂直偏移量和总高度都不包含
工具栏
高度。这是必要的,以便获得应用255 alpha值的百分比

  @Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {

        //measuring for alpha
        int toolBarHeight = toolbar.getMeasuredHeight();
        int appBarHeight = appBarLayout.getMeasuredHeight();
        Float f = ((((float) appBarHeight - toolBarHeight) + verticalOffset) / ( (float) appBarHeight - toolBarHeight)) * 255;
        fading_backdrop.getBackground().setAlpha(255 - Math.round(f));
   }

当您现在滚动时,向上滚动时,
淡入淡出的背景将逐渐增加alpha,以便它与
折叠工具栏布局中的图像很好地重叠,类似于facebook自定义
内容列表

此处淡入淡出的背景是什么?注意,如果您使用的是列表或透明状态栏,您可能需要将其添加到
f
的计算中。
  @Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {

        //measuring for alpha
        int toolBarHeight = toolbar.getMeasuredHeight();
        int appBarHeight = appBarLayout.getMeasuredHeight();
        Float f = ((((float) appBarHeight - toolBarHeight) + verticalOffset) / ( (float) appBarHeight - toolBarHeight)) * 255;
        fading_backdrop.getBackground().setAlpha(255 - Math.round(f));
   }