package com.dingmouren.dingdingmap.util; import android.animation.Animator; import android.app.Activity; import android.view.View; import android.view.ViewAnimationUtils; import android.view.animation.AccelerateDecelerateInterpolator; import java.lang.ref.WeakReference; /** * Created by dingmouren on 2017/3/13. */ public class RevealAnimatorUtil { private WeakReference<View> weakRootLayout; private WeakReference<Activity> weakActivity; public RevealAnimatorUtil(View view, Activity activity) { this.weakRootLayout = new WeakReference<View>(view); this.weakActivity = new WeakReference<Activity>(activity); } public void startRevealAnimator(boolean reversed, int x, int y){ View mRootLayout = weakRootLayout.get(); Activity mActivity = weakActivity.get(); if (mActivity == null || mRootLayout == null) return; float hypot = (float) Math.hypot(mRootLayout.getHeight(),mRootLayout.getWidth()); float startRadius = reversed ? hypot : 0; float endRadius = reversed ? 0 : hypot; Animator animator = ViewAnimationUtils.createCircularReveal(mRootLayout,x,y,startRadius,endRadius); animator.setDuration(800); animator.setInterpolator(new AccelerateDecelerateInterpolator()); if (reversed){ animator.addListener(animatorListener); } animator.start(); } private Animator.AnimatorListener animatorListener = new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { View mRootLayout = weakRootLayout.get(); Activity mActivity = weakActivity.get(); if (mActivity == null || mRootLayout == null) return; mRootLayout.setVisibility(View.INVISIBLE); mActivity.finish(); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }; }