RTEditor/src/main/java/com/onegravity/rteditor/media/crop/HighlightView.java
public int getHit(float x, float y) {
        Rect r = computeLayout();
        final float hysteresis = 20F;
        int retval = GROW_NONE;

        if (mCircle) {
            float distX = x - r.centerX();
            float distY = y - r.centerY();
            int distanceFromCenter = (int) Math.sqrt(distX * distX + distY
                    * distY);
            int radius = mDrawRect.width() / 2;
            int delta = distanceFromCenter - radius;
            if (Math.abs(delta) <= hysteresis) {
                if (Math.abs(distY) > Math.abs(distX)) {
                    if (distY < 0) {
                        retval = GROW_TOP_EDGE;
                    } else {
                        retval = GROW_BOTTOM_EDGE;
                    }
                } else {
                    if (distX < 0) {
                        retval = GROW_LEFT_EDGE;
                    } else {
                        retval = GROW_RIGHT_EDGE;
                    }
                }
            } else if (distanceFromCenter < radius) {
                retval = MOVE;
            } else {
                retval = GROW_NONE;
            }
        } else {
            // verticalCheck makes sure the position is between the top and
            // the bottom edge (with some tolerance). Similar for horizCheck.
            boolean verticalCheck = (y >= r.top - hysteresis)
                    && (y < r.bottom + hysteresis);
            boolean horizCheck = (x >= r.left - hysteresis)
                    && (x < r.right + hysteresis);

            // Check whether the position is near some edge(s).
            if ((Math.abs(r.left - x) < hysteresis) && verticalCheck) {
                retval |= GROW_LEFT_EDGE;
            }
            if ((Math.abs(r.right - x) < hysteresis) && verticalCheck) {
                retval |= GROW_RIGHT_EDGE;
            }
            if ((Math.abs(r.top - y) < hysteresis) && horizCheck) {
                retval |= GROW_TOP_EDGE;
            }
            if ((Math.abs(r.bottom - y) < hysteresis) && horizCheck) {
                retval |= GROW_BOTTOM_EDGE;
            }

            // Not near any edge but inside the rectangle: move.
            if (retval == GROW_NONE && r.contains((int) x, (int) y)) {
                retval = MOVE;
            }
        }
        return retval;
    }
public int getHit(float x, float y) {
        Rect r = computeLayout();
        final float hysteresis = 20F;
        int retval = GROW_NONE;

        if (mCircle) {
            float distX = x - r.centerX();
            float distY = y - r.centerY();
            int distanceFromCenter = (int) Math.sqrt(distX * distX + distY
                    * distY);
            int radius = mDrawRect.width() / 2;
            int delta = distanceFromCenter - radius;
            if (Math.abs(delta) <= hysteresis) {
                if (Math.abs(distY) > Math.abs(distX)) {
                    if (distY < 0) {
                        retval = GROW_TOP_EDGE;
                    } else {
                        retval = GROW_BOTTOM_EDGE;
                    }
                } else {
                    if (distX < 0) {
                        retval = GROW_LEFT_EDGE;
                    } else {
                        retval = GROW_RIGHT_EDGE;
                    }
                }
            } else if (distanceFromCenter < radius) {
                retval = MOVE;
            } else {
                retval = GROW_NONE;
            }
        } else {
            // verticalCheck makes sure the position is between the top and
            // the bottom edge (with some tolerance). Similar for horizCheck.
            boolean verticalCheck = (y >= r.top - hysteresis)
                    && (y < r.bottom + hysteresis);
            boolean horizCheck = (x >= r.left - hysteresis)
                    && (x < r.right + hysteresis);

            // Check whether the position is near some edge(s).
            if ((Math.abs(r.left - x) < hysteresis) && verticalCheck) {
                retval |= GROW_LEFT_EDGE;
            }
            if ((Math.abs(r.right - x) < hysteresis) && verticalCheck) {
                retval |= GROW_RIGHT_EDGE;
            }
            if ((Math.abs(r.top - y) < hysteresis) && horizCheck) {
                retval |= GROW_TOP_EDGE;
            }
            if ((Math.abs(r.bottom - y) < hysteresis) && horizCheck) {
                retval |= GROW_BOTTOM_EDGE;
            }

            // Not near any edge but inside the rectangle: move.
            if (retval == GROW_NONE && r.contains((int) x, (int) y)) {
                retval = MOVE;
            }
        }
        return retval;
    }
public int getHit ( float x , float y ) { Rect r = computeLayout ( ) ; final float hysteresis = 20F ; int retval = GROW_NONE ; if ( mCircle ) { float distX = x - r . centerX ( ) ; float distY = y - r . centerY ( ) ; int distanceFromCenter = ( int ) Math . sqrt ( distX * distX + distY * distY ) ; int radius = mDrawRect . width ( ) / 2 ; int delta = distanceFromCenter - radius ; if ( Math . abs ( delta ) <= hysteresis ) { if ( Math . abs ( distY ) > Math . abs ( distX ) ) { if ( distY < 0 ) { retval = GROW_TOP_EDGE ; } else { retval = GROW_BOTTOM_EDGE ; } } else { if ( distX < 0 ) { retval = GROW_LEFT_EDGE ; } else { retval = GROW_RIGHT_EDGE ; } } } else if ( distanceFromCenter < radius ) { retval = MOVE ; } else { retval = GROW_NONE ; } } else { // verticalCheck makes sure the position is between the top and // the bottom edge (with some tolerance). Similar for horizCheck. boolean verticalCheck = ( y >= r . top - hysteresis ) && ( y < r . bottom + hysteresis ) ; boolean horizCheck = ( x >= r . left - hysteresis ) && ( x < r . right + hysteresis ) ; // Check whether the position is near some edge(s). if ( ( Math . abs ( r . left - x ) < hysteresis ) && verticalCheck ) { retval |= GROW_LEFT_EDGE ; } if ( ( Math . abs ( r . right - x ) < hysteresis ) && verticalCheck ) { retval |= GROW_RIGHT_EDGE ; } if ( ( Math . abs ( r . top - y ) < hysteresis ) && horizCheck ) { retval |= GROW_TOP_EDGE ; } if ( ( Math . abs ( r . bottom - y ) < hysteresis ) && horizCheck ) { retval |= GROW_BOTTOM_EDGE ; } // Not near any edge but inside the rectangle: move. if ( retval == GROW_NONE && r . contains ( ( int ) x , ( int ) y ) ) { retval = MOVE ; } } return retval ; }
Determines which edges are hit by touching at (x, y).
Determines which edges are hit by touching at ( x y ) .