本文共 957 字,大约阅读时间需要 3 分钟。
在几个月之前,看到网易云音乐的这个效果觉得特别震撼,当时思前想后也没想出来这是怎么办到的,直到过了一段时间我发现了aosv这个库,看到其demo有非常多这样的实现,便记下这个库,一时间也没有去研究实现机制。
最近正好想要试一下这个效果,就去看了下代码细节,其实非常简单。 这个效果中,最重要的一点就是,toolbar、header的透明度状态,是与listview的滚动相关的。 而这最重要的一点,被aosv这个库实现了。 aosv这个库全名Android-ObservableScrollView,他重新封装了一系列view。(比如listView,gridview,webview,scrollview..) 重新封装过的view可以对自身的滚动状态调用不同的回调方法,所以我们只要在view的onScrollChanged中修改对应的组件状态就ok。 在网易云音乐这个例子中,是在listView中添加了一个header,我们只要根据listView的滚动状态更改toolbar与header的状态就可以实现这样的效果。 @Override public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) { int baseColor = getResources().getColor(R.color.colorPrimary); float alpha = Math.min(1, (float) scrollY / headerHeight); toolbar.setBackgroundColor(ScrollUtils.getColorWithAlpha(alpha, baseColor)); header.setAlpha(1 - alpha); //56dp * 640/160 ,上滚动距离超过toolbar高度则切换title显示 if(scrollY > 56*4){ toolbar.setTitle("CSDN"); }else{ toolbar.setTitle("Android"); } }
效果如下: 非常简单,效果也很酷炫。
aosv github地址: 我的demo地址: