// Path: skin-support/src/main/java/skin/support/animator/Action.java
// public interface Action {
//     void action();
// }
// 
// Path: skin-support/src/main/java/skin/support/animator/SkinAnimator.java
// public interface SkinAnimator {
//     int PRE_DURATION = 200;
//     int AFTER_DURATION = 200;
// 
//     SkinAnimator apply(@NonNull View view, @Nullable Action action);
// 
//     SkinAnimator setPreDuration();
// 
//     SkinAnimator setAfterDuration();
// 
//     SkinAnimator setDuration();
// 
//     void start();
// 
// }


import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.animation.LinearInterpolator;
import skin.support.animator.Action;
import skin.support.animator.SkinAnimator;

    public static SkinAlphaAnimator getInstance() {
        SkinAlphaAnimator skinAlphaAnimator = new SkinAlphaAnimator();
        return skinAlphaAnimator;
    }

    @Override
    public SkinAnimator apply(@NonNull View view, @Nullable final Action action) {
        this.targetView = view;
        preAnimator = ObjectAnimator.ofFloat(targetView, "alpha", 1, 0)
                .setDuration(PRE_DURATION);
        preAnimator.setInterpolator(new LinearInterpolator());
        afterAnimator = ObjectAnimator.ofFloat(targetView, "alpha", 0, 1)
                .setDuration(AFTER_DURATION);
        afterAnimator.setInterpolator(new LinearInterpolator());

        preAnimator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                if(action != null){
                    action.action();
                }
                afterAnimator.start();
            }
        });
        return this;
    }

    @Override
// Path: skin-support/src/main/java/skin/support/animator/Action.java
// public interface Action {
//     void action();
// }
// 
// Path: skin-support/src/main/java/skin/support/animator/SkinAnimator.java
// public interface SkinAnimator {
//     int PRE_DURATION = 200;
//     int AFTER_DURATION = 200;
// 
//     SkinAnimator apply(@NonNull View view, @Nullable Action action);
// 
//     SkinAnimator setPreDuration();
// 
//     SkinAnimator setAfterDuration();
// 
//     SkinAnimator setDuration();
// 
//     void start();
// 
// }


// Path: skin-support/src/main/java/skin/support/animator/activityAnimator/SkinAlphaAnimator.java
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.animation.LinearInterpolator;
import skin.support.animator.Action;
import skin.support.animator.SkinAnimator;


    public static SkinAlphaAnimator getInstance() {
        SkinAlphaAnimator skinAlphaAnimator = new SkinAlphaAnimator();
        return skinAlphaAnimator;
    }

    @Override
    public SkinAnimator apply(@NonNull View view, @Nullable final Action action) {
        this.targetView = view;
        preAnimator = ObjectAnimator.ofFloat(targetView, "alpha", 1, 0)
                .setDuration(PRE_DURATION);
        preAnimator.setInterpolator(new LinearInterpolator());
        afterAnimator = ObjectAnimator.ofFloat(targetView, "alpha", 0, 1)
                .setDuration(AFTER_DURATION);
        afterAnimator.setInterpolator(new LinearInterpolator());

        preAnimator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                if(action != null){
                    action.action();
                }
                afterAnimator.start();
            }
        });
        return this;
    }

    @Override
    public SkinAnimator setPreDuration() {