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>
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>
阅读全文
0 0
- RecycleView 浮动条简单实现
- RecycleView的简单实现
- 使用recycleview实现简单的柱状图
- recycleView简单实现listview的效果
- RecycleView简单实现滑动删除Item
- 导航条固定及浮动的实现
- ScrollView中浮动条的实现
- 快速实现实现RecycleView的二级菜单,简单易懂
- RecycleView的基本配置和使用方法(四)---RecycleView实现简单demo
- 实现简单浮动层的基本方法
- jQuery简单实现-QQ客服浮动面板
- recycleview多item布局的实现(简单聊天界面)
- 利用CDialogBar来实现类似工具栏的浮动条
- 利用CDialogBar来实现类似工具栏的浮动条
- RecycleView简单介绍
- RecycleView的简单使用
- RecycleView简单使用
- RecycleView简单使用
- 列表项的显示方式
- Android视频实时传输
- Android系统中,能大幅提高工作效率的API汇总
- Mac锁屏
- 通过实例深入学习Java的Struts框架中的OGNL表达式使用
- RecycleView 浮动条简单实现
- C++map key不存在
- Hadoop eclipse windows环境搭建
- PING命令使用的是什么协议?
- 关于python列表的+操作
- 协同工作Atlassian(一):Jira的安装与破解
- 算法 第四版 2.3.5
- luoguP1781 宇宙总统 题解
- position:absolute与position:relative的区别