protected void setPosition(float[] position) {
        if (isTornDown()) {
            return;
        }
        if (position.length < 3){
            throw new IllegalArgumentException("Missing a position value: All three " +
                    "[x,y,z] axis value are needed.");
        }

        mPosition = position;
        Vector vPosition = new Vector(position);

        /*
         If this is an anchored node and it's moved, determine if we need to re-anchor the
         node or if we can just move the node. If we just move the node, we have to take into
         the account the anchor's position (e.g. set the Node position to the new position
         minus the anchor's position in order to get the correct aggregate position).
         */
        if (mAnchor != null) {
            if (DEBUG_ANCHORING) {
                Log.i(TAG, "Repositioning anchor " + this + " to " + vPosition + " from " + mAnchor.getPositionRealtime());
            }
            if (vPosition.distance(mAnchor.getPositionRealtime()) > REANCHOR_DISTANCE) {
                if (DEBUG_ANCHORING) {
                    Log.i(TAG, "   Reposition distance greater than REANCHOR_DISTANCE: re-anchoring Node");
                }
                if (mAnchorAttempt != null) {
                    mAnchorAttempt.cancel();
                }
                mAnchorAttempt = new AnchorAttempt(this, vPosition);
                mAnchorAttempt.makeAttempt();
            } else {
                if (DEBUG_ANCHORING) {
                    Log.i(TAG, "   Reposition distance less than REANCHOR_DISTANCE: moving node relative to anchor");
                }
                Vector nodePosition = vPosition.subtract(mAnchor.getPositionRealtime());
                mNodeJni.setPosition(nodePosition);
            }
        } else {
            mNodeJni.setPosition(vPosition);
        }
    }
This function ensures that the children of this element aren't the top-most changed element.
android/viro_bridge/src/main/java/com/viromedia/bridge/component/node/VRTNode.java