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由Backgroundimageview
组成,它保存在我的折叠工具栏布局中显示的图片,在它前面是一个imageview,它只保存“scrimColor”?attr/colorPrimary,alpha为0,以便Backgroundimageview
将发光
然后我实现了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));
}