Andorid-PullToRefresh大家应该都非常的熟悉,是一个下拉刷新,上拉加载的控件。功能也是非常的强大,我们可以自定义各种动画。
SwipeMenuListview也是非常的常用,可以为你的listview添加侧滑菜单,功能也是很完善。
很多新人想使用侧滑和下拉刷新,上拉加载的时候会不知道怎么实现。其实把这两个控件集成一下也是很方便的。
首先我们来看看PullTorefreshListview,PullTorefreshScrollview ,PullTorefreshGridView.我们发现它们都继承了PullToRefreshBase,并且实现了getPullToRefreshScrollDirection,createRefreshableView,isReadyForPullEnd,isReadyForPullStart这四个方法。所以我们也可以自定义一个 PullToRefreshSwipeMenuListview,继承PullToRefreshBase,在getPullToRefreshScrollDirection方法中我们指定方向为竖向:
@Override
public Orientation getPullToRefreshScrollDirection() {
return Orientation.VERTICAL;
}
然后在createRefreshableView方法中:
@Override
protected SwipeMenuListView createRefreshableView(Context context, AttributeSet attrs) {
listView = new SwipeMenuListView(context, attrs);
return listView;
}
我们new出一个SwipeMenuListView对象return就ok了。
还有两个方法isReadyForPullStart和isReadyForPullEnd。我们只要判断listview是否到达顶部或者底部就可以了。
@Override
protected boolean isReadyForPullStart() {
if(listView.getAdapter() == null || listView.getAdapter().getCount()==0){
return true;
}
if (listView.getFirstVisiblePosition() == 0) {
if (listView.getChildAt(0).getTop() >= getRefreshableView().getTop()) {
return true;
}
}
return false;
}
@Override
protected boolean isReadyForPullEnd() {
if(listView.getAdapter() == null || listView.getAdapter().getCount()==0){
return true;
}
int lastPos = listView.getAdapter().getCount() - 1;
if (listView.getLastVisiblePosition() == lastPos) {
int i = listView.getAdapter().getCount() - ((SwipeMenuListView) getRefreshableView()).getChildCount();
if (listView.getChildAt(lastPos - i).getBottom() <= getRefreshableView().getBottom()) {
return true;
}
}
return false;
}
这样简单就实现了侧滑 上拉下拉兼具的控件。你也可以根据这个自定义一个可以下拉上拉的Recyclerview,Recyclerview判断顶部item和底部item是否完全显示提供了非常好的方法。不需要自己去计算。
Recyclerview.getLayoutManager 有以下两个方法。
findFirstCompletelyVisibleItemPosition和findLastCompletelyVisibleItemPosition。