android项目中如何实现给RecyclerView加上折叠效果

  

android项目中如何实现给RecyclerView加上折叠效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

效果

 android项目中如何实现给RecyclerView加上折叠效果

总结一下这个列表的特点,就是以下三点:

1。重叠效果;

2。层次感;

3。首项的差动效果。

下面我们来一个个解决。

我们新建一个ParallaxRecyclerView,让它继承RecyclerView,并使用LinearLayoutManager作为布局管理器。

<强>重叠效果

其实就是每一项都搭一部分在它前面那项而已。我们知道,RecyclerView可以通过设置ItemDecoration来实现列表的间隔效果,有没有想过要是把间隔设为负数会怎么样?比如:

 addItemDecoration(新ItemDecoration () {
  @Override
  观点看来,公共空间getItemOffsets(矩形outRect RecyclerView家长,状态状态){
  超级。getItemOffsets (outRect、视图、父母、状态);
  outRect。底=-dp2px(上下文,10);
  }
  });

没错,这就实现了我们的重叠效果。

<强>层次感

在材料设计里是有Z轴这个概念的,我们可以给控件设置垂直于屏幕的高度,让不在同一高度的控件看起来有层次感。当然,我们要用材料设计的控件才有这个属性,这里我用的是CardView。

我们给ParallaxRecyclerView增加一个滑动监听,在onScrolled方法里面做如下设置:

 LinearLayoutManager layoutManager=(LinearLayoutManager) recyclerView.getLayoutManager ();
  int firstPosition=layoutManager.findFirstVisibleItemPosition ();
  int lastPosition=layoutManager.findLastVisibleItemPosition ();
  int visibleCount=lastPosition - firstPosition;//重置控件的高度
  int海拔=1;
  for (int i=firstPosition - 1;我& lt;=(firstPosition + visibleCount) + 1;我+ +){
  视图视图=layoutManager.findViewByPosition(我);
  如果(视图!=null) {
  如果(查看instanceof CardView) {
  ((CardView)视图)。setCardElevation (dp2px(上下文、高程));
  海拔+=5;
  }
  
  }
  }

其中,setCardElevation方法就是用来给CardView设置高度的,这里让每一项的高度比它的上一项高5 dp。

<强>首项的差动

最后,我们想给第一项增加一个差动效果,这个同样在onScrolled方法里面做处理就好了:

视图firstView=layoutManager.findViewByPosition (firstPosition);
  浮动firstViewTop=firstView.getTop ();
  firstView。setTranslationY (-firstViewTop f/2.0); 

这样相当于第一项的滑动速度变成原来的一半。但这也会导致一个问题,由于改变了控件的位置,当这个控件被复用时,会出现位置不正确的情况,所以我们在设置高度的时候,可以顺便把控件的位置复原了:

浮动translationY=view.getTranslationY ();
  如果我比;firstPosition,,translationY !=0) {
  view.setTranslationY (0);
  }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

android项目中如何实现给RecyclerView加上折叠效果