/**
  * 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);
 }
예제 #2
0
 /*
  * 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;
 }
예제 #3
0
 private boolean canChildScrollLeft() {
   return ViewCompat.canScrollHorizontally(scrollChild, 1);
 }