Skip to content
Snippets Groups Projects
CustomAnimations.java 2.08 KiB
Newer Older
package org.briarproject.android.util;

import android.animation.Animator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.os.Build;
import android.view.ViewGroup;

akwizgran's avatar
akwizgran committed
import static android.view.View.GONE;
import static android.view.View.MeasureSpec.UNSPECIFIED;
import static android.view.View.VISIBLE;

public class CustomAnimations {

akwizgran's avatar
akwizgran committed
	public static void animateHeight(ViewGroup viewGroup, boolean isExtending,
akwizgran's avatar
akwizgran committed
		if (Build.VERSION.SDK_INT >= 11) {
			animateHeightPostGingerbread(viewGroup, isExtending, duration);
		} else {
akwizgran's avatar
akwizgran committed
			animateHeightGingerbread(viewGroup, isExtending);
akwizgran's avatar
akwizgran committed
	private static void animateHeightGingerbread(ViewGroup viewGroup,
			boolean isExtending) {
		// No animations for Gingerbread
akwizgran's avatar
akwizgran committed
		if (isExtending) viewGroup.setVisibility(VISIBLE);
		else viewGroup.setVisibility(GONE);
akwizgran's avatar
akwizgran committed
	private static void animateHeightPostGingerbread(final ViewGroup viewGroup,
			final boolean isExtending, int duration) {
		ValueAnimator anim;
		if (isExtending) {
akwizgran's avatar
akwizgran committed
			viewGroup.setVisibility(VISIBLE);
			viewGroup.measure(UNSPECIFIED, UNSPECIFIED);
			anim = ValueAnimator.ofInt(0, viewGroup.getMeasuredHeight());
		} else {
			anim = ValueAnimator.ofInt(viewGroup.getHeight(), 0);
		}
		anim.addListener(new Animator.AnimatorListener() {
akwizgran's avatar
akwizgran committed

			@Override
			public void onAnimationStart(Animator animation) {
			}

			@Override
			public void onAnimationEnd(Animator animation) {
				if (!isExtending) {
akwizgran's avatar
akwizgran committed
					viewGroup.setVisibility(GONE);
				}
			}

			@Override
			public void onAnimationCancel(Animator animation) {
			}

			@Override
			public void onAnimationRepeat(Animator animation) {
			}
		});
		anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
			@Override
			public void onAnimationUpdate(ValueAnimator valueAnimator) {
				int val = (Integer) valueAnimator.getAnimatedValue();
				ViewGroup.LayoutParams layoutParams =
						viewGroup.getLayoutParams();
				layoutParams.height = val;
				viewGroup.setLayoutParams(layoutParams);
			}
		});
		anim.setDuration(duration);
		anim.start();
	}
}