自定义下拉刷新上拉加载的帮助接口ScrollableHelper
2017-05-25 21:37
337 查看
现在写Android项目一般都会用到下拉创新以及上拉加载的功能,要想实现这一功能,就必须要在fragment和activity上实现Scrollable这一功能,基于这一功能,我整理了一下自己写的接口类ScrollableHelper,主要用于为fragment加上相应的功能,这里开始讲一下ScrollableHelper。
首先定义一个接口,用于得到fragment所包含的的view包括ScrollView/ListView/RecycelerView等。代码如图:
再接下来就是具体的实现判断各种view是否处于可以滑动的状态,以及滑动到了的状态,即该view是否是在滑动顶部等。具体的代码实现如下:
简单的实现的一个帮助接口,使各种view的滑动加以集成,并且使得实现下拉刷新上拉加载这一功能更加顺滑,希望对大家有所帮助。
首先定义一个接口,用于得到fragment所包含的的view包括ScrollView/ListView/RecycelerView等。代码如图:
/** * a viewgroup whitch contains ScrollView/ListView/RecycelerView.. */ public interface ScrollableContainer{ /** * @return ScrollView/ListView/RecycelerView..'s instance */ View getScrollableView(); } public void setCurrentScrollableContainer(ScrollableContainer scrollableContainer) { this.mCurrentScrollableCainer = scrollableContainer; } private View getScrollableView() { if (mCurrentScrollableCainer == null) { return null; } return mCurrentScrollableCainer.getScrollableView(); }
再接下来就是具体的实现判断各种view是否处于可以滑动的状态,以及滑动到了的状态,即该view是否是在滑动顶部等。具体的代码实现如下:
/** * * 判断是否滑动到顶部方法,ScrollAbleLayout根据此方法来做一些逻辑判断 * 目前只实现了AdapterView,ScrollView,RecyclerView * 需要支持其他view可以自行补充实现 * @return */ public boolean isTop() { View scrollableView = getScrollableView(); if (scrollableView == null) { // throw new NullPointerException("You should call ScrollableHelper.setCurrentScrollableContainer() to set ScrollableContainer."); return true; } if (scrollableView instanceof AdapterView) { return isAdapterViewTop((AdapterView) scrollableView); } if (scrollableView instanceof ScrollView) { return isScrollViewTop((ScrollView) scrollableView); } if (scrollableView instanceof RecyclerView) { return isRecyclerViewTop((RecyclerView) scrollableView); } if (scrollableView instanceof WebView) { return isWebViewTop((WebView) scrollableView); } throw new IllegalStateException("scrollableView must be a instance of AdapterView|ScrollView|RecyclerView"); } private static boolean isRecyclerViewTop(RecyclerView recyclerView) { if (recyclerView != null) { RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); if (layoutManager instanceof LinearLayoutManager) { int firstVisibleItemPosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); View childAt = recyclerView.getChildAt(0); if (childAt == null || (firstVisibleItemPosition == 0 && childAt.getTop() == 0)) { return true; } } } return false; } private static boolean isAdapterViewTop(AdapterView adapterView){ if(adapterView != null){ int firstVisiblePosition = adapterView.getFirstVisiblePosition(); View childAt = adapterView.getChildAt(0); if(childAt == null || (firstVisiblePosition == 0 && childAt.getTop() == 0)){ return true; } } return false; } private static boolean isScrollViewTop(ScrollView scrollView){ if(scrollView != null) { int scrollViewY = scrollView.getScrollY(); return scrollViewY <= 0; } return false; } private static boolean isWebViewTop(WebView scrollView){ if(scrollView != null) { int scrollViewY = scrollView.getScrollY(); return scrollViewY <= 0; } return false; } @SuppressLint("NewApi") public void smoothScrollBy(int velocityY, int distance, int duration) { View scrollableView = getScrollableView(); if (scrollableView instanceof AbsListView) { AbsListView absListView = (AbsListView) scrollableView; if (Build.VERSION.SDK_INT >= 21) { absListView.fling(velocityY); } else { absListView.smoothScrollBy(dista 9f28 nce, duration); } } else if (scrollableView instanceof ScrollView) { ((ScrollView) scrollableView).fling(velocityY); } else if (scrollableView instanceof RecyclerView) { ((RecyclerView) scrollableView).fling(0, velocityY); } else if (scrollableView instanceof WebView) { ((WebView) scrollableView).flingScroll(0, velocityY); } }
简单的实现的一个帮助接口,使各种view的滑动加以集成,并且使得实现下拉刷新上拉加载这一功能更加顺滑,希望对大家有所帮助。
相关文章推荐
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- 自定义SwpieRefreshLayout(进入页面自动刷新,下拉刷新,点击加载更多)
- 使用SwipeRefreshLayout和自定义listview实现下拉刷新上啦加载更多
- 自定义ListView实现下拉刷新,上拉加载更多
- 自定义listview,支持上拉下拉刷新,暴露出接口,自带demo
- android下拉刷新和滑动到底部加载更多,自定义listview
- 再也不用担心下拉刷新,上拉加载啦!-自定义ListView对上拉刷新,上拉加载的详解
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- 自定义ListView下拉刷新和上拉加载
- 自定义下拉刷新和加载更多_Android
- Android 自定义ListView 实现下拉刷新 上拉加载功能
- Swift下拉刷新上拉加载更多库,录音和播放功能,自定义的密码键盘,
- Android 自定义下拉刷新上拉加载更多Listview
- 自定义ListView_下拉刷新上拉加载更多
- 自定义下拉刷新和上拉加载更多ListView 拷贝可直接使用
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- 自定义带下拉刷新和滚动加载的ListView控件原理分析和实现
- 安卓自定义ListView实现上拉加载、下拉刷新