/** * Tests scrollability within child views of v given a delta of dx. * * @param v View to test for horizontal scrollability * @param checkV Whether the view v passed should itself be checked for scrollability (true), or * just its children (false). * @param dx Delta scrolled in pixels * @param x X coordinate of the active touch point * @param y Y coordinate of the active touch point * @return true if child views of v can be scrolled by delta of dx. */ protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { if (v instanceof ViewGroup) { final ViewGroup group = (ViewGroup) v; final int scrollX = v.getScrollX(); final int scrollY = v.getScrollY(); final int count = group.getChildCount(); // Count backwards - let topmost views consume scroll distance first. for (int i = count - 1; i >= 0; i--) { final View child = group.getChildAt(i); if (x + scrollX >= child.getLeft() && x + scrollX < child.getRight() && y + scrollY >= child.getTop() && y + scrollY < child.getBottom() && canScroll( child, true, dx, x + scrollX - child.getLeft(), y + scrollY - child.getTop())) { return true; } } } return checkV && ViewCompat.canScrollHorizontally(v, -dx); }
/* * Enabled aggressive block sorting */ protected boolean canScroll(View view, boolean bl, int n, int n2, int n3) { if (view instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup)view; int n4 = view.getScrollX(); int n5 = view.getScrollY(); for (int i = viewGroup.getChildCount() - 1; i >= 0; --i) { View view2 = viewGroup.getChildAt(i); if (n2 + n4 < view2.getLeft() || n2 + n4 >= view2.getRight() || n3 + n5 < view2.getTop() || n3 + n5 >= view2.getBottom() || !this.canScroll(view2, true, n, n2 + n4 - view2.getLeft(), n3 + n5 - view2.getTop())) continue; return true; } } if (bl) { if (!this.isLayoutRtlSupport()) { n = - n; } if (ViewCompat.canScrollHorizontally(view, n)) { return true; } } return false; }
private boolean canChildScrollLeft() { return ViewCompat.canScrollHorizontally(scrollChild, 1); }