由于是公司项目,不方便作图(自己懒!!!),所以盗用了网上一位兄弟的图,如侵权,立删。 实现效果大概如下(只看头部图片下拉的视差效果):
这位兄弟的博文地址是:既然这位兄弟已经实现了该功能,我为什么还要另写一篇文章呢? 第一是,因为我笨啊,这兄弟的代码功底很强,我模仿不出他实现的效果(我不是懒,真的)。 第二也是,我项目中没用到NestedScrollView
,也没那么多的滑动冲突,所以实现起来相对也就简单些。
实现这个效果主要就是用到了库,该库真的是很良心,不仅实现了很多酷炫的下拉刷新效果,而且写的例子也很到位,上文提到的作者应该也是参考了该库中的微博首页例子
,非常感谢作者!
再次感谢以上两位作者!
废话不多说,直接上代码!
实现第一步肯定是引入该库:
//1.1.0 API改动过大,老用户升级需谨慎compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-7'compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-7'//没有使用特殊Header,可以不加这行compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必须)复制代码
接着就是写
xml布局了,贴一下我的大概布局吧:
// 顶部可拉伸的图片 复制代码// 加载库 // 加载的头部 // 里面是 AppBarLayout + CollapsingToolbarLayout 组成的顶部 以及两个 fragment 对应的tab // ViewPager 中添加两个 fragment
再在代码中监听滑动就OK了,代码如下:
private int mOffset = 0; private int mScrollY = 0; refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener() { @Override public void onRefresh(@NonNull RefreshLayout refreshLayout) { // 做刷新操作 } @Override public void onHeaderMoving(RefreshHeader header, boolean isDragging, float percent, int offset, int headerHeight, int maxDragHeight) { // 下拉后的操作,这里只是做了平移效果`setTranslationY`,当然你可以做很多酷炫的效果 mOffset = offset / 2; parallax.setTranslationY(mOffset - mScrollY); toolbar.setAlpha(1 - Math.min(percent, 1)); }});复制代码
OK,收工!