package io.codetail.animation;
import android.annotation.TargetApi;
import android.graphics.Rect;
import android.os.Build;
import android.view.View;
import com.nineoldandroids.animation.Animator;
import java.lang.ref.WeakReference;
import static io.codetail.animation.ViewAnimationUtils.SimpleAnimationListener;
/**
* @hide
*/
public interface RevealAnimator{
public void setClipOutlines(boolean clip);
public void setCenter(float cx, float cy);
public void setTarget(View target);
public void setRevealRadius(float value);
public float getRevealRadius();
public void invalidate(Rect bounds);
static class RevealFinishedGingerbread extends SimpleAnimationListener {
WeakReference<RevealAnimator> mReference;
volatile Rect mInvalidateBounds;
RevealFinishedGingerbread(RevealAnimator target, Rect bounds) {
mReference = new WeakReference<>(target);
mInvalidateBounds = bounds;
}
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
RevealAnimator target = mReference.get();
if(target == null){
return;
}
target.setClipOutlines(false);
target.setCenter(0, 0);
target.setTarget(null);
target.invalidate(mInvalidateBounds);
}
}
static class RevealFinishedIceCreamSandwich extends SimpleAnimationListener {
WeakReference<RevealAnimator> mReference;
volatile Rect mInvalidateBounds;
int mLayerType;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
RevealFinishedIceCreamSandwich(RevealAnimator target, Rect bounds) {
mReference = new WeakReference<>(target);
mInvalidateBounds = bounds;
mLayerType = ((View) target).getLayerType();
}
@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
((View) mReference.get()).setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
((View) mReference.get()).setLayerType(mLayerType, null);
RevealAnimator target = mReference.get();
if(target == null){
return;
}
target.setClipOutlines(false);
target.setCenter(0, 0);
target.setTarget(null);
target.invalidate(mInvalidateBounds);
}
}
static class RevealFinishedJellyBeanMr1 extends SimpleAnimationListener {
WeakReference<RevealAnimator> mReference;
volatile Rect mInvalidateBounds;
int mLayerType;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
RevealFinishedJellyBeanMr1(RevealAnimator target, Rect bounds) {
mReference = new WeakReference<>(target);
mInvalidateBounds = bounds;
mLayerType = ((View) target).getLayerType();
}
@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
((View) mReference.get()).setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
((View) mReference.get()).setLayerType(mLayerType, null);
RevealAnimator target = mReference.get();
if(target == null){
return;
}
target.setClipOutlines(false);
target.setCenter(0, 0);
target.setTarget(null);
target.invalidate(mInvalidateBounds);
}
}
}