RecyclerView

RecyclerView & SnapHelper

2017-05-18  本文已影响2442人  劳达斯

SnapHelper

Google在support.design包24.2.0版本时添加了SnapHelper类,这个类用于结合RecyclerView使用,实现滑动之后确定RecyclerView Item的对齐方式:比如说居中、左对齐、顶部对齐等效果。SnapHelper是一个抽象类。Google官方有两个实现类

SnapHelper详细请参考:http://www.jianshu.com/p/ef3a3b8d0a77

今天使用SnapHelper实现了一个电影列表的DEMO:效果图如下(GIF有点卡):

GIF.gif

还可以用来实现选择器:


QQ截图20170625234402.jpg

像上面的效果

相对的,ViewPager也可以实现差不多的效果,只不过RecyclerView + LinearSnapHelper 可以快速滑动,而且有着 RecyclerView 的特性。
如何选择,得根据项目的实际情况了。个人认为两种方式的优缺点如下:

以上。

RecyclerView 判断滑动到底部的3种方法:

public static boolean isVisBottom(RecyclerView recyclerView){  
  LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();  
  //屏幕中最后一个可见子项的position
  int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();  
  //当前屏幕所看到的子项个数
  int visibleItemCount = layoutManager.getChildCount();  
  //当前RecyclerView的所有子项个数
  int totalItemCount = layoutManager.getItemCount();  
  //RecyclerView的滑动状态
  int state = recyclerView.getScrollState();  
  if(visibleItemCount > 0 && lastVisibleItemPosition == totalItemCount - 1 && state == recyclerView.SCROLL_STATE_IDLE){   
     return true; 
  }else {   
     return false;  
  }
}
public static boolean isSlideToBottom(RecyclerView recyclerView) {    
       if (recyclerView == null) return false; 
       if (recyclerView.computeVerticalScrollExtent() + recyclerView.computeVerticalScrollOffset() 
            >= recyclerView.computeVerticalScrollRange())   
         return true;  
       return false;
    }
RecyclerView.canScrollVertically(1)的值表示是否能向上滚动,false表示已经滚动到底部
RecyclerView.canScrollVertically(-1)的值表示是否能向下滚动,false表示已经滚动到顶部

RecyclerView是一个很强大的类。以后我会在Adapter与LayoutManager的方向上深入去学习这个控件。

上一篇下一篇

猜你喜欢

热点阅读