【发布时间】:2016-08-11 18:24:54
【问题描述】:
我目前正在尝试使用CoordinatorLayout 类根据ScrollView 滚动位置调整Toolbar 不透明度。我成功地“手动链接”了这两个视图,监听了 ScrollView 滚动事件并报告了我的 Toolbar 背景的 alpha 值。
想要的行为是:
工具栏一开始处于透明状态(文本和背景),并且在一次查看时完全白色背景和黑色文本完全滚动。
行为大致是这样的:Youtube video。
当前实施
布局文件(简体)
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<my.package.widgets.DetailsTop
android:id="@+id/layout_details_top"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<my.package.widgets.DetailsBottom
android:id="@+id/layout_details_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00FFFFFF"/>
</RelativeLayout>
片段实现
public class SearchVehicleDetailsFragment extends BaseFragment<SearchContract.ParentView> {
@Bind(R.id.layout_details_top) DetailsTop detailsTopLayout;
@Bind(R.id.layout_details_bottom) DetailsBottom detailsBottomLayout;
@Bind(R.id.scrollView) ScrollView scrollView;
@Bind(R.id.toolbar) Toolbar toolbar;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
float alpha = (float) scrollView.getScrollY() / vehicleDetailsTopLayout.getHeight();
toolbar.setBackgroundColor(getColorWithAlpha(alpha, getResources().getColor(R.color.white)));
toolbar.setTitleTextColor(getColorWithAlpha(alpha, getResources().getColor(R.color.dark_grey)));
}
});
}
public static int getColorWithAlpha(float alpha, int baseColor) {
int a = Math.min(255, Math.max(0, (int) (alpha * 255))) << 24;
int rgb = 0x00ffffff & baseColor;
return a + rgb;
}
}
问题
然而,即使之前的 sn-ps 是一个特别简单的解决方案,似乎可以完美运行,我只是有点困惑为什么它不能与 CoordinatorLayout 一起使用。另外,我发现一个人似乎通过自定义 CoordinatorLayout.Behavior<android.support.v7.widget.Toolbar> 实现成功地完成了这项任务。
你可以看看他的custom CoordinatorLayout.Behavior implementation。他还提供了有关Medium 的一些详细信息。然而,由于很多只是<android.support.v7.widget.Toolbar .../> 而不是完整的Toolbar 标签,并且对支持设计库的这部分工作原理缺乏了解,我永远无法实现它......
问题
我想了解CoordinatorLayout 及其周围的所有类如何协同工作。所以我可能能够实现我正在寻找的行为,即:将 ScrollView 滚动位置链接到工具栏背景颜色的 alpha 值。
显然,如果你也知道如何实现这一切,我会很高兴看到你的 sn-p :)
【问题讨论】:
-
它看起来像一个很酷的概念不错的兄弟
-
如果您正在寻找 coordinatorlayouts 的详细说明,请查看此内容。 medium.com/google-developers/…
标签: android android-scrollview android-coordinatorlayout androiddesignsupport