欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

仿网易云音乐新版详情页(沉浸式状态栏,上滑隐藏)

程序员文章站 2022-05-14 19:37:09
...
一、效果
仿网易云音乐新版详情页(沉浸式状态栏,上滑隐藏)
二、需求
1.Activity内容扩展到状态栏
2.内容为详情头和列表组成,列表上滑详情头会跟着同步上移,最后详情头缩小为Actionbar大小
3.在列表上滑的时候,详情头背景图形逐渐变暗,详情头内容变透明
4.列表具有下载加载更多的功能
5.点击列表项出现水波纹
6.下拉详情头的图片会放大,松手后自动弹回(由于实现构架->此示例未能实现)

三、原理
处理需求1:做沉浸式状态栏
在Activity里面调用以下函数
protected void setTranslucentStatus() {
    // 5.0以上系统状态栏透明
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.TRANSPARENT);
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }
}
处理需求2:内容为详情头和列表组成,列表上滑详情头会跟着同步上移,最后详情头缩小为Actionbar大小
1.整个Activity里放了一个完整的fragment,然后在fragmemnt里面布局
2.在整个fragment铺满放置一个frameLayout,然后铺满放一个recyclerview,
3.在上部放固定高度的RelativeLayout作为详情头
4.在java代码里给recyclerview添加一个和详情头一样高的headerview,
5.在java代码里获取recyclerview的onScroll的dy参数用以移动详情头的布局上下移动,实现详情头和列表同步移动
6.通过动态修改详情头的padding来达到布局上移的效果

处理需求3:在列表上滑的时候,详情头背景图形逐渐变暗,详情头内容变透明
1.在布局文件里,给背景图片上面盖一层覆盖view,并设置为透明颜色
2.在recyclerview的onScroll中根据移动的距离调整覆盖view的透明度,达到背景变暗,
3.在recyclerview的onScroll中根据移动距离调整textview和imageview的透明度达到内容变透明

处理需求4:列表具有下载加载更多的功能
1.在java代码里给recyclerview添加footerview,用以显示“加载中。。。”
2.在recyclerview的onScroll里判断列表的最后一个即footerview是否显示在屏幕的上,并出发获取数据的函数
3.获取到新数据添加到列表数据里面,刷新列表,实现下拉加载

处理需求5:点击列表项出现水波纹
在recyclerview的列表项设置以下背景即可,源代码有俩个背景实现用于兼容
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#666666">
    <item android:drawable="@color/item_bg"/>
</ripple>
四、实现步骤
在实现过程中参考其他的文章示例
具体实现步骤看源代码,在代码里面有注释
源码下载地址

https://github.com/robert1207/neteaseDemo


相关标签: recyclerview