start Collapse View Animation On - Android Animation

Android examples for Animation:Collapse Animation

Description

start Collapse View Animation On

Demo Code

/*//from w w w  . j  a v  a 2 s  .  c o  m
 * Copyright (C) 2016 Marco Hernaiz Cao
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
//package com.java2s;

import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;

import android.view.animation.Transformation;

public class Main {
    public static final int FADE_DURATION = 200;
    public static final int EXPAND_OR_COLLAPSE_DURATION = 300;

    public static void startCollapseViewAnimationOn(
            final View expandableContainer) {
        if (expandableContainer.getVisibility() == View.VISIBLE) {
            Animation animation = getCollapseViewAnimation(
                    expandableContainer, EXPAND_OR_COLLAPSE_DURATION);
            expandableContainer.startAnimation(animation);
        }
    }

    public static void startCollapseViewAnimationOn(
            final View collapsibleContainer, final View fadeContainer) {
        startCollapseViewAnimationOn(collapsibleContainer, fadeContainer,
                null, EXPAND_OR_COLLAPSE_DURATION);
    }

    public static void startCollapseViewAnimationOn(
            final View collapsibleContainer, final View fadeContainer,
            int collapseDuration) {
        startCollapseViewAnimationOn(collapsibleContainer, fadeContainer,
                null, collapseDuration);
    }

    public static void startCollapseViewAnimationOn(
            final View collapsibleContainer, final View fadeContainer,
            final AnimationListener listener) {
        startCollapseViewAnimationOn(collapsibleContainer, fadeContainer,
                listener, EXPAND_OR_COLLAPSE_DURATION);
    }

    public static void startCollapseViewAnimationOn(
            final View collapsibleContainer, final View fadeContainer,
            final AnimationListener listener, final int collapseDuration) {

        Animation animation = getFadeOutAnimation(FADE_DURATION);
        animation.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                Animation secondAnimation = getCollapseViewAnimation(
                        collapsibleContainer, collapseDuration);
                if (listener != null) {
                    secondAnimation.setAnimationListener(listener);
                }
                collapsibleContainer.startAnimation(secondAnimation);
            }
        });
        fadeContainer.startAnimation(animation);
    }

    public static Animation getCollapseViewAnimation(final View view,
            int duration) {
        final int initialHeight = view.getMeasuredHeight();

        Animation animation = new Animation() {
            @Override
            protected void applyTransformation(float interpolatedTime,
                    Transformation t) {
                if (interpolatedTime == 1) {
                    view.setVisibility(View.GONE);
                } else {
                    view.getLayoutParams().height = initialHeight
                            - (int) (initialHeight * interpolatedTime);
                    view.requestLayout();
                }
            }

            @Override
            public boolean willChangeBounds() {
                return true;
            }
        };

        animation.setDuration(duration);
        return animation;
    }

    public static Animation getFadeOutAnimation(int durationInMilliseconds) {
        Animation fadeOut = new AlphaAnimation(1, 0);
        fadeOut.setFillAfter(true);
        fadeOut.setInterpolator(new AccelerateInterpolator());
        fadeOut.setDuration(durationInMilliseconds);
        return fadeOut;
    }
}

Related Tutorials