Java Code Examples for android.view.ViewGroup#getScrollY()

The following examples show how to use android.view.ViewGroup#getScrollY() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SmoothRefreshLayout.java    From SmoothRefreshLayout with MIT License 6 votes vote down vote up
public void transformPointToViewLocal(ViewGroup group, float[] point, View child) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
        group.transformPointToViewLocal(point, child);
    } else {
        // When the system version is lower than LOLLIPOP_MR1, the system source code has no
        // transformPointToViewLocal method. We need to be compatible with it.
        point[0] += group.getScrollX() - child.getLeft();
        point[1] += group.getScrollY() - child.getTop();
        Matrix matrix = child.getMatrix();
        if (!matrix.isIdentity()) {
            mCachedMatrix.reset();
            if (matrix.invert(mCachedMatrix)) {
                mCachedMatrix.mapPoints(point);
            }
        }
    }
}
 
Example 2
Source File: TouchTargetHelper.java    From react-native-GPay with MIT License 5 votes vote down vote up
/**
 * Returns whether the touch point is within the child View
 * It is transform aware and will invert the transform Matrix to find the true local points
 * This code is taken from {@link ViewGroup#isTransformedTouchPointInView()}
 */
private static boolean isTransformedTouchPointInView(
    float x,
    float y,
    ViewGroup parent,
    View child,
    PointF outLocalPoint) {
  float localX = x + parent.getScrollX() - child.getLeft();
  float localY = y + parent.getScrollY() - child.getTop();
  Matrix matrix = child.getMatrix();
  if (!matrix.isIdentity()) {
    float[] localXY = mMatrixTransformCoords;
    localXY[0] = localX;
    localXY[1] = localY;
    Matrix inverseMatrix = mInverseMatrix;
    matrix.invert(inverseMatrix);
    inverseMatrix.mapPoints(localXY);
    localX = localXY[0];
    localY = localXY[1];
  }
  if (child instanceof ReactHitSlopView && ((ReactHitSlopView) child).getHitSlopRect() != null) {
    Rect hitSlopRect = ((ReactHitSlopView) child).getHitSlopRect();
    if ((localX >= -hitSlopRect.left && localX < (child.getRight() - child.getLeft()) + hitSlopRect.right)
        && (localY >= -hitSlopRect.top && localY < (child.getBottom() - child.getTop()) + hitSlopRect.bottom)) {
      outLocalPoint.set(localX, localY);
      return true;
    }

    return false;
  } else {
    if ((localX >= 0 && localX < (child.getRight() - child.getLeft()))
        && (localY >= 0 && localY < (child.getBottom() - child.getTop()))) {
      outLocalPoint.set(localX, localY);
      return true;
    }

    return false;
  }
}
 
Example 3
Source File: RNTouchTargetHelper.java    From react-native-sensors-analytics with Apache License 2.0 5 votes vote down vote up
private static boolean isTransformedTouchPointInView(float x, float y, ViewGroup parent, View child, PointF outLocalPoint) {
    float localX = (((float) parent.getScrollX()) + x) - ((float) child.getLeft());
    float localY = (((float) parent.getScrollY()) + y) - ((float) child.getTop());
    Matrix matrix = child.getMatrix();
    if (!matrix.isIdentity()) {
        float[] localXY = mMatrixTransformCoords;
        localXY[0] = localX;
        localXY[1] = localY;
        Matrix inverseMatrix = mInverseMatrix;
        matrix.invert(inverseMatrix);
        inverseMatrix.mapPoints(localXY);
        localX = localXY[0];
        localY = localXY[1];
    }
    if ((child instanceof ReactHitSlopView) && ((ReactHitSlopView) child).getHitSlopRect() != null) {
        Rect hitSlopRect = ((ReactHitSlopView) child).getHitSlopRect();
        if (localX < ((float) (-hitSlopRect.left)) || localX >= ((float) ((child.getRight() - child.getLeft()) + hitSlopRect.right)) || localY < ((float) (-hitSlopRect.top)) || localY >= ((float) ((child.getBottom() - child.getTop()) + hitSlopRect.bottom))) {
            return false;
        }
        outLocalPoint.set(localX, localY);
        return true;
    } else if (localX < 0.0f || localX >= ((float) (child.getRight() - child.getLeft())) || localY < 0.0f || localY >= ((float) (child.getBottom() - child.getTop()))) {
        return false;
    } else {
        outLocalPoint.set(localX, localY);
        return true;
    }
}
 
Example 4
Source File: MDRootLayout.java    From talk-android with MIT License 5 votes vote down vote up
private void invalidateDividersForScrollingView(ViewGroup view, final boolean setForTop, boolean setForBottom, boolean hasButtons) {
    if (setForTop && view.getChildCount() > 0) {
        mDrawTopDivider = mTitleBar != null &&
                mTitleBar.getVisibility() != View.GONE &&
                //Not scrolled to the top.
                view.getScrollY() + view.getPaddingTop() > view.getChildAt(0).getTop();

    }
    if (setForBottom && view.getChildCount() > 0) {
        mDrawBottomDivider = hasButtons &&
                view.getScrollY() + view.getHeight() - view.getPaddingBottom() < view.getChildAt(view.getChildCount() - 1).getBottom();
    }
}
 
Example 5
Source File: FocusAnimator.java    From delion with Apache License 2.0 5 votes vote down vote up
/** Scroll the layout so that the focused child is on screen. */
private void requestChildFocus() {
    ViewGroup parent = (ViewGroup) mLayout.getParent();
    if (mLayout.getParent() == null) return;

    // Scroll the parent to make the focused child visible.
    if (mFocusedChild != null) parent.requestChildFocus(mLayout, mFocusedChild);

    // {@link View#requestChildFocus} fails to account for children changing their height, so
    // the scroll value may be past the actual maximum.
    int viewportHeight = parent.getBottom() - parent.getTop();
    int scrollMax = Math.max(0, mLayout.getMeasuredHeight() - viewportHeight);
    if (parent.getScrollY() > scrollMax) parent.setScrollY(scrollMax);
}
 
Example 6
Source File: FocusAnimator.java    From AndroidChromium with Apache License 2.0 5 votes vote down vote up
/** Scroll the layout so that the focused child is on screen. */
private void requestChildFocus() {
    ViewGroup parent = (ViewGroup) mLayout.getParent();
    if (mLayout.getParent() == null) return;

    // Scroll the parent to make the focused child visible.
    if (mFocusedChild != null) parent.requestChildFocus(mLayout, mFocusedChild);

    // {@link View#requestChildFocus} fails to account for children changing their height, so
    // the scroll value may be past the actual maximum.
    int viewportHeight = parent.getBottom() - parent.getTop();
    int scrollMax = Math.max(0, mLayout.getMeasuredHeight() - viewportHeight);
    if (parent.getScrollY() > scrollMax) parent.setScrollY(scrollMax);
}
 
Example 7
Source File: ViewUtil.java    From weex with Apache License 2.0 5 votes vote down vote up
public static boolean isTransformedPointInView(
    ViewGroup parent,
    View child,
    float x,
    float y,
    @Nullable PointF outLocalPoint) {
  Util.throwIfNull(parent);
  Util.throwIfNull(child);

  float localX = x + parent.getScrollX() - child.getLeft();
  float localY = y + parent.getScrollY() - child.getTop();

  // TODO: handle transforms
  /*Matrix childMatrix = child.getMatrix();
  if (!childMatrix.isIdentity()) {
    final float[] localXY = new float[2];
    localXY[0] = localX;
    localXY[1] = localY;
    child.getInverseMatrix
  }*/

  final boolean isInView = ViewUtil.pointInView(child, localX, localY);
  if (isInView && outLocalPoint != null) {
    outLocalPoint.set(localX, localY);
  }

  return isInView;
}
 
Example 8
Source File: FocusAnimator.java    From 365browser with Apache License 2.0 5 votes vote down vote up
/** Scroll the layout so that the focused child is on screen. */
private void requestChildFocus() {
    ViewGroup parent = (ViewGroup) mLayout.getParent();
    if (mLayout.getParent() == null) return;

    // Scroll the parent to make the focused child visible.
    if (mFocusedChild != null) parent.requestChildFocus(mLayout, mFocusedChild);

    // {@link View#requestChildFocus} fails to account for children changing their height, so
    // the scroll value may be past the actual maximum.
    int viewportHeight = parent.getBottom() - parent.getTop();
    int scrollMax = Math.max(0, mLayout.getMeasuredHeight() - viewportHeight);
    if (parent.getScrollY() > scrollMax) parent.setScrollY(scrollMax);
}
 
Example 9
Source File: ScrollBoundaryUtil.java    From CollapsingRefresh with Apache License 2.0 4 votes vote down vote up
public static void transformPointToViewLocal(ViewGroup group, View child, float[] point) {
    point[0] += group.getScrollX() - child.getLeft();
    point[1] += group.getScrollY() - child.getTop();
}
 
Example 10
Source File: ScrollingUtil.java    From AgentWebX5 with Apache License 2.0 4 votes vote down vote up
public static boolean isViewGroupToBottom(ViewGroup viewGroup) {
    View subChildView = viewGroup.getChildAt(0);
    return (subChildView != null && subChildView.getMeasuredHeight() <= viewGroup.getScrollY() + viewGroup.getHeight());
}
 
Example 11
Source File: ScrollingUtil.java    From TwinklingRefreshLayout with Apache License 2.0 4 votes vote down vote up
public static boolean isViewGroupToBottom(ViewGroup viewGroup) {
    View subChildView = viewGroup.getChildAt(0);
    return (subChildView != null && subChildView.getMeasuredHeight() <= viewGroup.getScrollY() + viewGroup.getHeight());
}