當前位置:
首頁 >
RecyclerView悬浮标题
發布時間:2025/4/16
49
豆豆
生活随笔
收集整理的這篇文章主要介紹了
RecyclerView悬浮标题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
效果圖:
??????
1.頂部會懸浮章的部分
2.第二章上滑會推擠第一章
3.第二章下拉會帶出第一章
4.并不是所有時候都有懸浮部分(為什么這條標紅,因為市面上幾乎所有的懸浮都是必須存在且在頂部,害的我必須自己寫)
如果你要的只是和IOS通訊錄相似的效果,即總有一行懸浮在頂部,百度stickyItemDecoration即可,網上一抓一大把,這里隨便參考一個http://blog.csdn.net/briblue/article/details/70211942?,原理很簡單,就是給recyclerview分組,每個item都帶一個header頭布局,同一組第一個才顯示,其他位置不顯示,自帶動效
可惜啊,我這里屏幕頂部還有其他的布局,導致一開始不能懸浮
根據頂部可見position來顯示和隱藏懸浮行,大家都會,我主要講如果做第二章推擠第一章的動效:
結構圖分析如下:
代碼如下
private void setTopView() {recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {@Overridepublic void onScrolled(RecyclerView t, int dx, int dy) {//標題欄底部的Y坐標int[] titleLocation = new int[2];rootLayout.getLocationOnScreen(titleLocation);int titleY = titleLocation[1] + rootLayout.getMeasuredHeight();//最頂部可見的位置int position = layoutManager.findFirstVisibleItemPosition();//第二個布局的頂部Y坐標BaseViewHolder viewHolder = (BaseViewHolder) recyclerView.findViewHolderForAdapterPosition(position + 1);View layout = viewHolder.getConvertView();int[] location = new int[2];layout.getLocationOnScreen(location);int y = location[1];//懸浮章的底部坐標int topBottom = titleY + topChapterLayout.getMeasuredHeight();RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, topChapterLayout.getMeasuredHeight());if (list.get(position) instanceof CourseDetail) {CourseDetail courseDetail = (CourseDetail) list.get(position);CourseDetail courseDetailAfter = (CourseDetail) list.get(position + 1);if (!TextUtils.isEmpty(courseDetail.getChapterTitle())) {params.topMargin = 0;topChapterLayout.setLayoutParams(params);topChapterLayout.setVisibility(View.VISIBLE);chapter.setText(courseDetail.getChapterTitle());switch (courseDetail.getChapterStatus()) {case 0:noComplete.setVisibility(View.VISIBLE);complete.setVisibility(View.GONE);break;case 1:complete.setVisibility(View.VISIBLE);noComplete.setVisibility(View.GONE);break;}if (null == courseDetailAfter) {return;}if (courseDetail.getChapterId() != courseDetailAfter.getChapterId()) {if (y <= topBottom) {int scrollY = y - topBottom;params.topMargin = scrollY;topChapterLayout.setLayoutParams(params);}}}} else {topChapterLayout.setVisibility(View.INVISIBLE);}}}); }?主要原理就是判斷y和topBottom的大小,如果第二章已經開始遮蓋懸浮的位置了,那懸浮位置就上移,形成推擠的動效
總結
以上是生活随笔為你收集整理的RecyclerView悬浮标题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终于将SAP系统完全配置通过了
- 下一篇: 【五】MongoDB管理之生产环境说明