android给RecyclerView加上折叠的效果示例

 更新时间:2017年02月20日 15:43:46   作者:SouthernBox  
RecyclerView有很高的自由度,本篇文章主要介绍了android给RecyclerView加上折叠的效果示例,让RecyclerView带上折叠的效果,有兴趣的可以了解一下。

RecyclerView有很高的自由度,可以说只有想不到没有做不到,真是越用越喜欢。这次用超简单的方法,让RecyclerView带上折叠的效果。

效果是这样的。

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

1. 重叠效果;

2. 层次感;

3. 首项的差动效果。

下面我们来一个个解决。

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

重叠效果

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

addItemDecoration(new ItemDecoration() {
      @Override
      public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {
        super.getItemOffsets(outRect, view, parent, state);
        outRect.bottom = -dp2px(context, 10);
      }
    });

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

层次感

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

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

LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
int firstPosition = layoutManager.findFirstVisibleItemPosition();
int lastPosition = layoutManager.findLastVisibleItemPosition();
int visibleCount = lastPosition - firstPosition;
//重置控件的高度
int elevation = 1;
for (int i = firstPosition - 1; i <= (firstPosition + visibleCount) + 1; i++) {
  View view = layoutManager.findViewByPosition(i);
  if (view != null) {
    if (view instanceof CardView) {
      ((CardView) view).setCardElevation(dp2px(context, elevation));
      elevation += 5;
    }

  }
}

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

首项的差动

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

View firstView = layoutManager.findViewByPosition(firstPosition);
float firstViewTop = firstView.getTop();
firstView.setTranslationY(-firstViewTop / 2.0f);

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

 float translationY = view.getTranslationY();
if (i > firstPosition && translationY != 0) {
  view.setTranslationY(0);
}

这样就完成了一个带有简单折叠效果的RecyclerView了,妥妥的。

源码地址:ParallaxRecyclerView_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android 更新RecyclerView的好方法

    Android 更新RecyclerView的好方法

    在使用RecyclerView的时候不免要修改RecyclerView的数据,使用notifyDataSetChanged()来刷新界面,但是当数据多,而只是修改了一点的数据,或者刷新比较频繁,这样就会导致界面卡顿,用户交互特别不好,这时可以使用RecyclerView方法解决,具体实现代码大家参考下本文吧
    2017-06-06
  • Android DrawerLayout带有侧滑功能的布局类(2)

    Android DrawerLayout带有侧滑功能的布局类(2)

    这篇文章主要为大家详细介绍了Android DrawerLayout带有侧滑功能的布局类,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android开发手册RatingBar星级评分控件实例

    Android开发手册RatingBar星级评分控件实例

    这篇文章主要为大家介绍了Android开发手册RatingBar星级评分控件实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Android Activity启动模式之singleTask实例详解

    Android Activity启动模式之singleTask实例详解

    这篇文章主要介绍了Android Activity启动模式之singleTask,结合实例形式较为详细的分析了singleTask模式的功能、使用方法与相关注意事项,需要的朋友可以参考下
    2016-01-01
  • Android GuideView实现首次登陆引导

    Android GuideView实现首次登陆引导

    这篇文章主要为大家详细介绍了Android GuideView实现首次登陆引导,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • Android 实现将Bitmap 保存到本地

    Android 实现将Bitmap 保存到本地

    这篇文章主要介绍了Android 实现将Bitmap 保存到本地,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android开发基础实现最简单的视频播放示例

    Android开发基础实现最简单的视频播放示例

    这篇文章主要为大家介绍了Android开发基础实现最简单的视频播放示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • RollViewPager无限轮播使用方法详解

    RollViewPager无限轮播使用方法详解

    这篇文章主要为大家详细介绍了RollViewPager无限轮播的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android自定义View实现饼状图带动画效果

    Android自定义View实现饼状图带动画效果

    这篇文章主要为大家详细介绍了Android自定义View实现饼状图带动画效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Android手机卫士之设置密码对话框

    Android手机卫士之设置密码对话框

    这篇文章主要为大家详细介绍了Android手机卫士之设置密码对话框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10

最新评论