package com.cheng.animationstudy.customview.bagrefresh; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; import android.widget.AbsListView; import android.widget.ScrollView; import com.cheng.animationstudy.customview.bagrefresh.BGAStickyNavLayout; /** * 作者:王浩 邮件:bingoogolapple@gmail.com * 创建时间:15/10/28 上午2:26 * 描述: */ public class BGAScrollingUtil { private BGAScrollingUtil() { } public static boolean isScrollViewOrWebViewToTop(View view) { return view != null && view.getScrollY() == 0; } public static boolean isAbsListViewToTop(AbsListView absListView) { if (absListView != null) { int firstChildTop = 0; if (absListView.getChildCount() > 0) { // 如果AdapterView的子控件数量不为0,获取第一个子控件的top firstChildTop = absListView.getChildAt(0).getTop() - absListView.getPaddingTop(); } if (absListView.getFirstVisiblePosition() == 0 && firstChildTop == 0) { return true; } } return false; } public static boolean isRecyclerViewToTop(RecyclerView recyclerView) { if (recyclerView != null) { int firstChildTop = 0; if (recyclerView.getChildCount() > 0) { // 如果RecyclerView的子控件数量不为0,获取第一个子控件的top // 解决item的topMargin不为0时不能触发下拉刷新 ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) recyclerView.getChildAt(0).getLayoutParams(); firstChildTop = recyclerView.getChildAt(0).getTop() - layoutParams.topMargin - recyclerView.getPaddingTop(); } RecyclerView.LayoutManager manager = recyclerView.getLayoutManager(); if (manager == null) { return true; } if (manager.getItemCount() == 0) { return true; } if (manager instanceof LinearLayoutManager) { LinearLayoutManager layoutManager = (LinearLayoutManager) manager; if (layoutManager.findFirstCompletelyVisibleItemPosition() == 0 && firstChildTop == 0) { return true; } } else if (manager instanceof StaggeredGridLayoutManager) { StaggeredGridLayoutManager layoutManager = (StaggeredGridLayoutManager) manager; int[] out = layoutManager.findFirstCompletelyVisibleItemPositions(null); if (out[0] == 0) { return true; } } } return false; } public static boolean isStickyNavLayoutToTop(BGAStickyNavLayout stickyNavLayout) { return isScrollViewOrWebViewToTop(stickyNavLayout) && stickyNavLayout.isContentViewToTop(); } public static boolean isWebViewToBottom(WebView webView) { return webView != null && webView.getContentHeight() * webView.getScale() == (webView.getScrollY() + webView.getMeasuredHeight()); } public static boolean isScrollViewToBottom(ScrollView scrollView) { if (scrollView != null) { int scrollContentHeight = scrollView.getScrollY() + scrollView.getMeasuredHeight() - scrollView.getPaddingTop() - scrollView.getPaddingBottom(); int realContentHeight = scrollView.getChildAt(0).getMeasuredHeight(); if (scrollContentHeight == realContentHeight) { return true; } } return false; } }