@TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public static SupportAnimator createCircularReveal(View view,
                                                int centerX,  int centerY,
                                                float startRadius, float endRadius) {

        if(!(view.getParent() instanceof RevealAnimator)){
            throw new IllegalArgumentException("View must be inside RevealFrameLayout or RevealLinearLayout.");
        }

        RevealAnimator revealLayout = (RevealAnimator) view.getParent();
        revealLayout.attachRevealInfo(new RevealInfo(centerX, centerY, startRadius, endRadius,
                new WeakReference<>(view)));

        if(LOLLIPOP_PLUS){
            return new SupportAnimatorLollipop(android.view.ViewAnimationUtils
                    .createCircularReveal(view, centerX, centerY, startRadius, endRadius), revealLayout);
        }

        ObjectAnimator reveal = ObjectAnimator.ofFloat(revealLayout, CLIP_RADIUS,
                startRadius, endRadius);
        reveal.addListener(getRevealFinishListener(revealLayout));

        return new SupportAnimatorPreL(reveal, revealLayout);
    }
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public static SupportAnimator createCircularReveal(View view,
                                                int centerX,  int centerY,
                                                float startRadius, float endRadius) {

        if(!(view.getParent() instanceof RevealAnimator)){
            throw new IllegalArgumentException("View must be inside RevealFrameLayout or RevealLinearLayout.");
        }

        RevealAnimator revealLayout = (RevealAnimator) view.getParent();
        revealLayout.attachRevealInfo(new RevealInfo(centerX, centerY, startRadius, endRadius,
                new WeakReference<>(view)));

        if(LOLLIPOP_PLUS){
            return new SupportAnimatorLollipop(android.view.ViewAnimationUtils
                    .createCircularReveal(view, centerX, centerY, startRadius, endRadius), revealLayout);
        }

        ObjectAnimator reveal = ObjectAnimator.ofFloat(revealLayout, CLIP_RADIUS,
                startRadius, endRadius);
        reveal.addListener(getRevealFinishListener(revealLayout));

        return new SupportAnimatorPreL(reveal, revealLayout);
    }
@ TargetApi ( Build . VERSION_CODES . LOLLIPOP ) public static SupportAnimator createCircularReveal ( View view , int centerX , int centerY , float startRadius , float endRadius ) { if ( ! ( view . getParent ( ) instanceof RevealAnimator ) ) { throw new IllegalArgumentException ( "View must be inside RevealFrameLayout or RevealLinearLayout." ) ; } RevealAnimator revealLayout = ( RevealAnimator ) view . getParent ( ) ; revealLayout . attachRevealInfo ( new RevealInfo ( centerX , centerY , startRadius , endRadius , new WeakReference <> ( view ) ) ) ; if ( LOLLIPOP_PLUS ) { return new SupportAnimatorLollipop ( android . view . ViewAnimationUtils . createCircularReveal ( view , centerX , centerY , startRadius , endRadius ) , revealLayout ) ; } ObjectAnimator reveal = ObjectAnimator . ofFloat ( revealLayout , CLIP_RADIUS , startRadius , endRadius ) ; reveal . addListener ( getRevealFinishListener ( revealLayout ) ) ; return new SupportAnimatorPreL ( reveal , revealLayout ) ; }
Returns an Animator which can animate a clipping circle.
<p>
Any shadow cast by the View will respect the circular clip from this animator.
<p>
Only a single non-rectangular clip can be applied on a View at any time.
Views clipped by a circular reveal animation take priority over
{@link android.view.View#setClipToOutline(boolean) View Outline clipping}.
<p>
Note that the animation returned here is a one-shot animation. It cannot
be re-used, and once started it cannot be paused or resumed.

@param view The View will be clipped to the animating circle.
@param centerX The x coordinate of the center of the animating circle.
@param centerY The y coordinate of the center of the animating circle.
@param startRadius The starting radius of the animating circle.
@param endRadius The ending radius of the animating circle.
Returns an Animator which can animate a clipping circle . <p > Any shadow cast by the View will respect the circular clip from this animator . <p > Only a single non - rectangular clip can be applied on a View at any time . Views clipped by a circular reveal animation take priority over { @link android . view . View#setClipToOutline ( boolean ) View Outline clipping } . <p > Note that the animation returned here is a one - shot animation . It cannot be re - used and once started it cannot be paused or resumed .