當(dāng)前位置:
首頁 >
RecyclerView悬浮标题
發(fā)布時間:2025/4/16
27
豆豆
生活随笔
收集整理的這篇文章主要介紹了
RecyclerView悬浮标题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
效果圖:
??????
1.頂部會懸浮章的部分
2.第二章上滑會推擠第一章
3.第二章下拉會帶出第一章
4.并不是所有時候都有懸浮部分(為什么這條標(biāo)紅,因為市面上幾乎所有的懸浮都是必須存在且在頂部,害的我必須自己寫)
如果你要的只是和IOS通訊錄相似的效果,即總有一行懸浮在頂部,百度stickyItemDecoration即可,網(wǎng)上一抓一大把,這里隨便參考一個http://blog.csdn.net/briblue/article/details/70211942?,原理很簡單,就是給recyclerview分組,每個item都帶一個header頭布局,同一組第一個才顯示,其他位置不顯示,自帶動效
可惜啊,我這里屏幕頂部還有其他的布局,導(dǎo)致一開始不能懸浮
根據(jù)頂部可見position來顯示和隱藏懸浮行,大家都會,我主要講如果做第二章推擠第一章的動效:
結(jié)構(gòu)圖分析如下:
代碼如下
private void setTopView() {recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {@Overridepublic void onScrolled(RecyclerView t, int dx, int dy) {//標(biāo)題欄底部的Y坐標(biāo)int[] titleLocation = new int[2];rootLayout.getLocationOnScreen(titleLocation);int titleY = titleLocation[1] + rootLayout.getMeasuredHeight();//最頂部可見的位置int position = layoutManager.findFirstVisibleItemPosition();//第二個布局的頂部Y坐標(biāo)BaseViewHolder viewHolder = (BaseViewHolder) recyclerView.findViewHolderForAdapterPosition(position + 1);View layout = viewHolder.getConvertView();int[] location = new int[2];layout.getLocationOnScreen(location);int y = location[1];//懸浮章的底部坐標(biāo)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的大小,如果第二章已經(jīng)開始遮蓋懸浮的位置了,那懸浮位置就上移,形成推擠的動效
總結(jié)
以上是生活随笔為你收集整理的RecyclerView悬浮标题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终于将SAP系统完全配置通过了
- 下一篇: Python网络数据采集