安卓(Android) 怎么开始展开视图(View)动画(Animation)

2019年10月15日20:32:09安卓(Android) 怎么开始展开视图(View)动画(Animation)已关闭评论 266 2943字阅读9分48秒

1.简介

安卓(Android) 怎么开始展开视图(View)动画(Animation)?——请看下文。

2.示例代码

/**
 * 版权所有 编程十万个怎么办(www.tah1986.com)
 */

 


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;
            }
        };

        
        
        
        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;
    }
}

 
继续阅读
编程十万个怎么办