打造Android万能上拉下拉刷新框架--XRefreshView(一)
打造Android万能上拉下拉刷新框架--XRefreshView(三)
一、前言
自从上次发表了打造android万能上拉下拉刷新框架——XRefreshView (一)之后,期间的大半个月一直都很忙,但是我每天晚上下班以后都有在更新和维护XRefreshView,也根据一些朋友的意见解决了一些问题,这次之所以写这篇文章,是因为XRefreshView已经到了一个功能相对可靠和稳定的一个阶段。下面我会介绍下XrefreshView的最新功能和用法,以及实现的主要思路。
二、更新
2.1判断下拉上拉刷新时机方式的修改
之前是通过 refreshView.setRefreshViewType(XRefreshViewType.ABSLISTVIEW);这样来预先设置view的类型来选择对应判断时机的方法,现在已经不用这样做了,改成了下面这样。
/**
* @return Whether it is possible for the child view of this layout to
* scroll up. Override this if the child view is a custom view.
*/
public boolean canChildPullDown() {
if (child instanceof AbsListView) {
final AbsListView absListView = (AbsListView) child;
return canScrollVertically(child, -1)
|| absListView.getChildCount() > 0
&& (absListView.getFirstVisiblePosition() > 0 || absListView
.getChildAt(0).getTop() < absListView
.getPaddingTop());
} else {
return canScrollVertically(child, -1) || child.getScrollY() > 0;
}
}
public boolean canChildPullUp() {
if (child instanceof AbsListView) {
AbsListView absListView = (AbsListView) child;
return canScrollVertically(child, 1)
|| absListView.getLastVisiblePosition() != mTotalItemCount - 1;
} else if (child instanceof WebView) {
WebView webview = (WebView) child;
return canScrollVertically(child, 1)
|| webview.getContentHeight() * webview.getScale() != webview
.getHeight() + webview.getScrollY();
} else if (child instanceof ScrollView) {
ScrollView scrollView = (ScrollView) child;
View childView = scrollView.getChildAt(0);
if (childView != null) {
return canScrollVertically(child, 1)
|| scrollView.getScrollY() != childView.getHeight()
- scrollView.getHeight();
}
}else{
return canScrollVertically(child, 1);
}
return true;
}
/**
* 用来判断view在竖直方向上能不能向上或者向下滑动
* @param view v
* @param direction 方向 负数代表向上滑动 ,正数则反之
* @return
*/
public boolean canScrollVertically(View view, int direction) {
return ViewCompat.canScrollVertically(view, direction);
}
正如你所见,ViewCompat.canScrollVertically(view, direction)这个方法可以用来判断view能不能向上或者向下滑动,从而可以判断view有没有到达顶部或者底部,在4.0以后在个方法通常是很管用的,但是2.3.3以前则不是这样