/*
* Copyright (C) 2015 Naman Dwivedi
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*/
package com.naman14.timber.utils;
import android.os.Build;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPropertyAnimatorListener;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import com.naman14.timber.R;
public class FabAnimationUtils {
private static final long DEFAULT_DURATION = 200L;
private static final Interpolator FAST_OUT_SLOW_IN_INTERPOLATOR = new FastOutSlowInInterpolator();
public static void scaleIn(final View fab) {
scaleIn(fab, DEFAULT_DURATION, null);
}
public static void scaleIn(final View fab, long duration, final ScaleCallback callback) {
fab.setVisibility(View.VISIBLE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
ViewCompat.animate(fab)
.scaleX(1.0F)
.scaleY(1.0F)
.alpha(1.0F)
.setDuration(duration)
.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR)
.withLayer()
.setListener(new ViewPropertyAnimatorListener() {
public void onAnimationStart(View view) {
if (callback != null) callback.onAnimationStart();
}
public void onAnimationCancel(View view) {
}
public void onAnimationEnd(View view) {
view.setVisibility(View.VISIBLE);
if (callback != null) callback.onAnimationEnd();
}
}).start();
} else {
Animation anim = AnimationUtils.loadAnimation(fab.getContext(), R.anim.design_fab_out);
anim.setDuration(duration);
anim.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
anim.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) {
if (callback != null) callback.onAnimationStart();
}
public void onAnimationEnd(Animation animation) {
fab.setVisibility(View.VISIBLE);
if (callback != null) callback.onAnimationEnd();
}
@Override
public void onAnimationRepeat(Animation animation) {
//
}
});
fab.startAnimation(anim);
}
}
public static void scaleOut(final View fab) {
scaleOut(fab, DEFAULT_DURATION, null);
}
public static void scaleOut(final View fab, final ScaleCallback callback) {
scaleOut(fab, DEFAULT_DURATION, callback);
}
public static void scaleOut(final View fab, long duration, final ScaleCallback callback) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
ViewCompat.animate(fab)
.scaleX(0.0F)
.scaleY(0.0F).alpha(0.0F)
.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR)
.setDuration(duration)
.withLayer()
.setListener(new ViewPropertyAnimatorListener() {
public void onAnimationStart(View view) {
if (callback != null) callback.onAnimationStart();
}
public void onAnimationCancel(View view) {
}
public void onAnimationEnd(View view) {
view.setVisibility(View.INVISIBLE);
if (callback != null) callback.onAnimationEnd();
}
}).start();
} else {
Animation anim = AnimationUtils.loadAnimation(fab.getContext(), R.anim.design_fab_out);
anim.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
anim.setDuration(duration);
anim.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) {
if (callback != null) callback.onAnimationStart();
}
public void onAnimationEnd(Animation animation) {
fab.setVisibility(View.INVISIBLE);
if (callback != null) callback.onAnimationEnd();
}
@Override
public void onAnimationRepeat(Animation animation) {
//
}
});
fab.startAnimation(anim);
}
}
public interface ScaleCallback {
void onAnimationStart();
void onAnimationEnd();
}
}