RecycleView 浮动条简单实现

来源:互联网 发布:excel统计一列数据个数 编辑:程序博客网 时间:2024/06/02 00:35


工作中遇到一个需求,列表滚动时要把其中一个item 悬浮在手机屏幕顶部。搞android 好几年了,我对自定义view一般都是改别人的。

主要还是看需求,如果效果简单,组合几个view就可以达到效果,自己就顺手写了,如果自我感觉复杂一下,肯定baidu 改别人的。

 

先看看这个简单的效果:




实现方式:

1:根据需求定位需要悬浮的item, 我这里是第二个条目。

2:定位停留位置:也就是悬浮在顶部,正好api有个方法

 linearManager.findFirstVisibleItemPosition(),可以定位到第一个可见条目。

3:在悬浮view位置覆盖一层相同的item。这个就需要在activity的布局中写。

4:注意Recycle所在的这个activity要用FrameLayout,也就是将recycleview和悬浮view 都放在

FrameLayout中。否则放在LinearLayout中会跳动,relativelayout 没有试。

5:监听悬浮view和item重合的时候,也就是findFirstVisibleItemPosition()==悬浮item的索引 。

当列表向上滚动时,findFirstVisibleItemPosition()和悬浮item的索引 重合时 ,停留固定悬浮view。

当列表向下滚动时,findFirstVisibleItemPosition()+1 和悬浮item的索引 重合时 ,隐藏悬浮view。


具体核心代码:首先将悬浮view隐藏

ll_floatview :表示悬浮view.

 ll_floatview.setVisibility(View.GONE);//首先将悬浮view隐藏        recyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() {            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);                int firstVisible = linearManager.findFirstVisibleItemPosition();                DebugUtil.e("dx:" + dx + "--dy:" + dy);                DebugUtil.e("firstVisible" + firstVisible);                if (dy > 0) {                    //列表往上划动                    if (firstVisible == 1) {                        ll_floatview.setVisibility(View.VISIBLE);                    }                } else {                    //列表往下划动                    if (firstVisible == 0) {                        ll_floatview.setVisibility(View.GONE);                    }                }            }        });

activity布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@color/default_background"    android:orientation="vertical">    <include layout="@layout/common_title_layout" />
<!-- 注意要用Framelayout-->    <FrameLayout        android:layout_width="match_parent"        android:layout_height="match_parent">        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="match_parent">            <android.support.v7.widget.RecyclerView                android:id="@+id/recyclerview"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:visibility="visible" />        </RelativeLayout>        <LinearLayout            android:id="@+id/ll_floatview"            android:layout_width="match_parent"            android:layout_height="50dp"            android:background="@color/red"            android:orientation="vertical">            <LinearLayout                android:layout_width="match_parent"                android:layout_height="48dp"                android:orientation="horizontal">                <LinearLayout                    android:id="@+id/ll_volunteering"                    android:layout_width="wrap_content"                    android:layout_height="match_parent"                    android:layout_weight="1"                    android:gravity="center">                    <TextView                        android:id="@+id/tv_volunteering"                        android:layout_width="wrap_content"                        android:layout_height="wrap_content"                        android:text="正在资助"                        android:textColor="@color/color_55a8a8a8"                        android:textSize="@dimen/text_size_16" />                </LinearLayout>                <LinearLayout                    android:id="@+id/ll_volunteered"                    android:layout_width="wrap_content"                    android:layout_height="match_parent"                    android:layout_weight="1"                    android:gravity="center">                    <TextView                        android:id="@+id/tv_volunteered"                        android:layout_width="wrap_content"                        android:layout_height="wrap_content"                        android:text="已资助"                        android:textColor="@color/text_color_585858"                        android:textSize="@dimen/text_size_16" />                </LinearLayout>            </LinearLayout>            <View                android:id="@+id/tv_line"                android:layout_width="120dp"                android:layout_height="3dp"                android:background="@color/yellow_FFA412" />        </LinearLayout>    </FrameLayout></LinearLayout>


RecycleView item布局:分为三种,其中TYPE_HEADER_2 就是要和悬浮view重合的布局

    final int TYPE_HEADER = 1;    final int TYPE_HEADER_2 = 2;    final int TYPE_ITEM = 3;

TYPE_HEADER_2 布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@color/default_background"    android:orientation="vertical">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="50dp"        android:background="@color/red"        android:orientation="vertical">        <LinearLayout            android:layout_width="match_parent"            android:layout_height="48dp"            android:orientation="horizontal">            <LinearLayout                android:id="@+id/ll_volunteering"                android:layout_width="wrap_content"                android:layout_height="match_parent"                android:layout_weight="1"                android:gravity="center">                <TextView                    android:id="@+id/tv_volunteering"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:text="正在资助"                    android:textColor="@color/color_55a8a8a8"                    android:textSize="@dimen/text_size_16" />            </LinearLayout>            <LinearLayout                android:id="@+id/ll_volunteered"                android:layout_width="wrap_content"                android:layout_height="match_parent"                android:layout_weight="1"                android:gravity="center">                <TextView                    android:id="@+id/tv_volunteered"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:text="已资助"                    android:textColor="@color/text_color_585858"                    android:textSize="@dimen/text_size_16" />            </LinearLayout>        </LinearLayout>        <View            android:id="@+id/tv_line"            android:layout_width="120dp"            android:layout_height="3dp"            android:background="@color/yellow_FFA412" />    </LinearLayout></LinearLayout>








原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 心里素质不好容易紧张怎么办 孩子二年级成绩差怎么办 遇到素质低的人怎么办 孩子上课注意力不集中怎么办 素质报告册丢了怎么办 潞城镇剩下5个村怎么办 高三复读生学籍怎么办 被检精子总数少怎么办 前向运动精子17%怎么办 精子形态正常率1怎么办 精子形态正常率2怎么办 精子头部畸形率高怎么办 椎底动脉供血不足怎么办 颈椎动脉供血不足怎么办 颈椎病引起头晕脑供血不足怎么办 淘宝店被释放了怎么办 被枣蝎子蛰了怎么办 六角螺丝拧花了怎么办 苹果螺丝滑丝了怎么办 六角螺帽拧花了怎么办 六角螺母拧花了怎么办 内六角螺丝滑丝怎么办 十字螺丝拧花了怎么办 梅花螺丝滑丝了怎么办 螺丝孔道滑丝了,怎么办 锅把铆钉松啦怎么办 膨胀螺丝孔大了怎么办 戒指不圆了怎么办妙招 眼镜框的腿断了怎么办 弹簧腿眼镜坏了怎么办 vps搭建ss被墙怎么办 注塑机螺杆黏料怎么办 分解师耐久度0了怎么办 有鼻涕擤不出来怎么办 擤鼻涕耳朵堵了怎么办 脸用什么都过敏怎么办 1岁宝宝流清鼻涕怎么办 2岁宝宝流清鼻涕怎么办 3岁儿童流清鼻涕怎么办 鼻子老是流清水鼻涕怎么办 5岁儿童感冒鼻塞怎么办