Java Code Examples for android.view.View#getMatrix()

The following examples show how to use android.view.View#getMatrix() . These examples are extracted from open source projects. 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
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
/**
 * Recursive helper method that applies transformations in post-order.
 *
 * @param ev the on-screen motion event
 */
private static void transformMotionEventToLocal(@NonNull View view, @NonNull MotionEvent ev) {
    final ViewParent parent = view.getParent();
    if (parent instanceof View) {
        final View vp = (View) parent;
        transformMotionEventToLocal(vp, ev);
        ev.offsetLocation(vp.getScrollX(), vp.getScrollY());
    }
    // TODO: Use reflections to access ViewRootImpl
    // else if (parent instanceof ViewRootImpl) {
    //    final ViewRootImpl vr = (ViewRootImpl) parent;
    //    ev.offsetLocation(0, vr.mCurScrollY);
    // }

    ev.offsetLocation(-view.getLeft(), -view.getTop());

    Matrix matrix = view.getMatrix();
    if (matrix != null) {
        ev.transform(matrix);
    }
}
 
Example 3
/**
 * Recursive helper method that applies transformations in pre-order.
 *
 * @param ev the on-screen motion event
 */
private static void transformMotionEventToGlobal(@NonNull View view, @NonNull MotionEvent ev) {
    Matrix matrix = view.getMatrix();
    if (matrix != null) {
        ev.transform(matrix);
    }

    ev.offsetLocation(view.getLeft(), view.getTop());

    final ViewParent parent = view.getParent();
    if (parent instanceof View) {
        final View vp = (View) parent;
        ev.offsetLocation(-vp.getScrollX(), -vp.getScrollY());
        transformMotionEventToGlobal(vp, ev);
    }
    // TODO: Use reflections to access ViewRootImpl
    // else if (parent instanceof ViewRootImpl) {
    //    final ViewRootImpl vr = (ViewRootImpl) parent;
    //    ev.offsetLocation(0, -vr.mCurScrollY);
    // }
}
 
Example 4
Source Project: HeadsUp   File: ViewUtils.java    License: GNU General Public License v2.0 6 votes vote down vote up
/**
 * Recursive helper method that applies transformations in post-order.
 *
 * @param ev the on-screen motion event
 */
private static void transformMotionEventToLocal(@NonNull View view, @NonNull MotionEvent ev) {
    final ViewParent parent = view.getParent();
    if (parent instanceof View) {
        final View vp = (View) parent;
        transformMotionEventToLocal(vp, ev);
        ev.offsetLocation(vp.getScrollX(), vp.getScrollY());
    }
    // TODO: Use reflections to access ViewRootImpl
    // else if (parent instanceof ViewRootImpl) {
    //    final ViewRootImpl vr = (ViewRootImpl) parent;
    //    ev.offsetLocation(0, vr.mCurScrollY);
    // }

    ev.offsetLocation(-view.getLeft(), -view.getTop());

    Matrix matrix = view.getMatrix();
    if (matrix != null) {
        ev.transform(matrix);
    }
}
 
Example 5
Source Project: HeadsUp   File: ViewUtils.java    License: GNU General Public License v2.0 6 votes vote down vote up
/**
 * Recursive helper method that applies transformations in pre-order.
 *
 * @param ev the on-screen motion event
 */
private static void transformMotionEventToGlobal(@NonNull View view, @NonNull MotionEvent ev) {
    Matrix matrix = view.getMatrix();
    if (matrix != null) {
        ev.transform(matrix);
    }

    ev.offsetLocation(view.getLeft(), view.getTop());

    final ViewParent parent = view.getParent();
    if (parent instanceof View) {
        final View vp = (View) parent;
        ev.offsetLocation(-vp.getScrollX(), -vp.getScrollY());
        transformMotionEventToGlobal(vp, ev);
    }
    // TODO: Use reflections to access ViewRootImpl
    // else if (parent instanceof ViewRootImpl) {
    //    final ViewRootImpl vr = (ViewRootImpl) parent;
    //    ev.offsetLocation(0, -vr.mCurScrollY);
    // }
}
 
Example 6
/**
 * Recursive helper method that applies transformations in post-order.
 *
 * @param ev the on-screen motion event
 */
private static void transformMotionEventToLocal(@NonNull View view, @NonNull MotionEvent ev) {
    final ViewParent parent = view.getParent();
    if (parent instanceof View) {
        final View vp = (View) parent;
        transformMotionEventToLocal(vp, ev);
        ev.offsetLocation(vp.getScrollX(), vp.getScrollY());
    } // TODO: Use reflections to access ViewRootImpl
    // else if (parent instanceof ViewRootImpl) {
    //    final ViewRootImpl vr = (ViewRootImpl) parent;
    //    ev.offsetLocation(0, vr.mCurScrollY);
    // }

    ev.offsetLocation(-view.getLeft(), -view.getTop());

    Matrix matrix = view.getMatrix();
    if (matrix != null) {
        ev.transform(matrix);
    }
}
 
Example 7
/**
 * Recursive helper method that applies transformations in pre-order.
 *
 * @param ev the on-screen motion event
 */
private static void transformMotionEventToGlobal(@NonNull View view, @NonNull MotionEvent ev) {
    Matrix matrix = view.getMatrix();
    if (matrix != null) {
        ev.transform(matrix);
    }

    ev.offsetLocation(view.getLeft(), view.getTop());

    final ViewParent parent = view.getParent();
    if (parent instanceof View) {
        final View vp = (View) parent;
        ev.offsetLocation(-vp.getScrollX(), -vp.getScrollY());
        transformMotionEventToGlobal(vp, ev);
    } // TODO: Use reflections to access ViewRootImpl
    // else if (parent instanceof ViewRootImpl) {
    //    final ViewRootImpl vr = (ViewRootImpl) parent;
    //    ev.offsetLocation(0, -vr.mCurScrollY);
    // }
}
 
Example 8
private void transformPointToViewLocal(float[] point, View child) {
    point[0] += mParent.getScrollX() - child.getLeft();
    point[1] += mParent.getScrollY() - child.getTop();
    Matrix matrix = child.getMatrix();
    if (!matrix.isIdentity()) {
        Matrix invert = getTempMatrix();
        boolean result = matrix.invert(invert);
        if (result) {
            invert.mapPoints(point);
        }
    }
}
 
Example 9
Source Project: react-native-GPay   File: TouchTargetHelper.java    License: 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 10
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;
    }
}