RecyclerView悬浮标题
生活随笔
收集整理的這篇文章主要介紹了
RecyclerView悬浮标题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
效果圖:
??????
1.頂部會(huì)懸浮章的部分
2.第二章上滑會(huì)推擠第一章
3.第二章下拉會(huì)帶出第一章
4.并不是所有時(shí)候都有懸浮部分(為什么這條標(biāo)紅,因?yàn)槭忻嫔蠋缀跛械膽腋《际潜仨毚嬖谇以陧敳?#xff0c;害的我必須自己寫)
如果你要的只是和IOS通訊錄相似的效果,即總有一行懸浮在頂部,百度stickyItemDecoration即可,網(wǎng)上一抓一大把,這里隨便參考一個(gè)http://blog.csdn.net/briblue/article/details/70211942?,原理很簡(jiǎn)單,就是給recyclerview分組,每個(gè)item都帶一個(gè)header頭布局,同一組第一個(gè)才顯示,其他位置不顯示,自帶動(dòng)效
可惜啊,我這里屏幕頂部還有其他的布局,導(dǎo)致一開(kāi)始不能懸浮
根據(jù)頂部可見(jiàn)position來(lái)顯示和隱藏懸浮行,大家都會(huì),我主要講如果做第二章推擠第一章的動(dòng)效:
結(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();//最頂部可見(jiàn)的位置int position = layoutManager.findFirstVisibleItemPosition();//第二個(gè)布局的頂部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)開(kāi)始遮蓋懸浮的位置了,那懸浮位置就上移,形成推擠的動(dòng)效
總結(jié)
以上是生活随笔為你收集整理的RecyclerView悬浮标题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 终于将SAP系统完全配置通过了
- 下一篇: Python网络数据采集