项目需求下拉刷新而且新增需求根据滑动的距离改变顶部导航栏的透明度,之前使用PullToRefreshSrcollView实现的布局,而这个没有提供滑动监听的方法,网上搜索更多的是SrcollView的滑动监听。
查看源码:
protected ScrollView createRefreshableView(Context context, AttributeSet attrs) {
ScrollView scrollView;
if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) {
scrollView = new InternalScrollViewSDK9(context, attrs);
} else {
scrollView = new ScrollView(context, attrs);
}
scrollView.setId(R.id.scrollview);
return scrollView;
}
源码是在这里创建的SrcollView。将这里的SrcollView换成能够滑动监听的SrcollView是不是就可以呢?修改后解决问题。废话不多讲,上代码。
实现滑动监听的SrcollView。网上有很多,直接copy就行。
public class ObservableScrollView extends ScrollView { private ScrollViewListener scrollViewListener = null; public ObservableScrollView(Context context) { super(context); } public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public ObservableScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public void setScrollViewListener(ScrollViewListener scrollViewListener) { this.scrollViewListener = scrollViewListener; } @Override protected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); if (scrollViewListener != null) { scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); } } public interface ScrollViewListener { void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy); } }
PullToRefreshSrcollView的 createRefreshableView方法修改:
protected ScrollView createRefreshableView(Context context, AttributeSet attrs) { ObservableScrollView scrollView; if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) { scrollView = new ObservableScrollView(context, attrs); } else { scrollView = (ObservableScrollView) new ScrollView(context, attrs); } scrollView.setId(R.id.scrollview); return scrollView; }
在代码中:
获取到srcollview
scrollView = (ObservableScrollView) pullToRefresh.getRefreshableView();
//设置监听
scrollView.setScrollViewListener(scrollChangedListener);