start Expand View Animation On - Android Animation

Android examples for Animation:Expand Animation

Description

start Expand View Animation On

Demo Code

/*/*from ww  w.j av a  2s  . 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;

import android.widget.RelativeLayout;

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

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

    public static void startExpandViewAnimationOn(
            final View expandableContainer, final View fadeContainer) {
        startExpandViewAnimationOn(expandableContainer, fadeContainer,
                null, EXPAND_OR_COLLAPSE_DURATION);
    }

    public static void startExpandViewAnimationOn(
            final View expandableContainer, final View fadeContainer,
            final int expandDuration) {
        startExpandViewAnimationOn(expandableContainer, fadeContainer,
                null, expandDuration);
    }

    public static void startExpandViewAnimationOn(
            final View expandableContainer, final View fadeContainer,
            final AnimationListener listener) {
        startExpandViewAnimationOn(expandableContainer, fadeContainer,
                listener, EXPAND_OR_COLLAPSE_DURATION);
    }

    public static void startExpandViewAnimationOn(
            final View expandableContainer, final View fadeContainer,
            final AnimationListener listener, final int expandDuration) {

        Animation animation = getExpandViewAnimation(expandableContainer,
                expandDuration);
        animation.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                Animation secondAnimation = getFadeInAnimation(FADE_DURATION);
                if (listener != null) {
                    secondAnimation.setAnimationListener(listener);
                }
                fadeContainer.startAnimation(secondAnimation);
            }
        });
        expandableContainer.startAnimation(animation);
    }

    public static Animation getExpandViewAnimation(final View view,
            int duration) {

        view.measure(RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        final int targetHeight = view.getMeasuredHeight();

        view.getLayoutParams().height = 0;
        view.setVisibility(View.VISIBLE);
        Animation animation = new Animation() {
            @Override
            protected void applyTransformation(float interpolatedTime,
                    Transformation t) {
                view.getLayoutParams().height = interpolatedTime == 1 ? RelativeLayout.LayoutParams.WRAP_CONTENT
                        : (int) (targetHeight * interpolatedTime);
                view.requestLayout();
            }

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

        // 1dp/ms
        // animation.setDuration((int) (targetHeight /
        // view.getContext().getResources().getDisplayMetrics().density));
        animation.setDuration(duration);
        return animation;
    }

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

Related Tutorials