View setVisibility隐藏和显示视图带有动画

94 阅读1分钟

显示视图并带有放大动画

public static void scaleIn(final View view) {
    view.setVisibility(View.VISIBLE);
    ScaleAnimation scaleIn = new ScaleAnimation(0f, 1f, 0f, 1f,
            Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    scaleIn.setDuration(DURATION);
    scaleIn.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {}

        @Override
        public void onAnimationEnd(Animation animation) {
            view.setScaleX(1f);
            view.setScaleY(1f);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {}
    });
    view.startAnimation(scaleIn);
}

隐藏视图并带有缩小动画

public static void scaleOut(final View view) {
    ScaleAnimation scaleOut = new ScaleAnimation(1f, 0f, 1f, 0f,
            Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    scaleOut.setDuration(DURATION);
    scaleOut.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {}

        @Override
        public void onAnimationEnd(Animation animation) {
            view.setVisibility(View.GONE);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {}
    });
    view.startAnimation(scaleOut);
}

ViewUtils完整代码:

import android.view.View;
import android.view.animation.ScaleAnimation;
import android.view.animation.Animation;

public class ViewUtils {

    // 动画持续时间
    private static final long DURATION = 300;

    // 显示视图并带有放大动画
    public static void scaleIn(final View view) {
        view.setVisibility(View.VISIBLE);
        ScaleAnimation scaleIn = new ScaleAnimation(0f, 1f, 0f, 1f,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        scaleIn.setDuration(DURATION);
        scaleIn.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {}

            @Override
            public void onAnimationEnd(Animation animation) {
                view.setScaleX(1f);
                view.setScaleY(1f);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {}
        });
        view.startAnimation(scaleIn);
    }

    // 隐藏视图并带有缩小动画
    public static void scaleOut(final View view) {
        ScaleAnimation scaleOut = new ScaleAnimation(1f, 0f, 1f, 0f,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        scaleOut.setDuration(DURATION);
        scaleOut.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {}

            @Override
            public void onAnimationEnd(Animation animation) {
                view.setVisibility(View.GONE);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {}
        });
        view.startAnimation(scaleOut);
    }
}

使用:

public void scaleOut(){
    ViewUtils.scaleOut(viewPager);
    ViewUtils.scaleOut(indicator);
}

public void scaleIn(){
    ViewUtils.scaleIn(viewPager);
    ViewUtils.scaleIn(indicator);
}