Android简单的动画使用

参考我以前的一篇博客,从底部弹出菜单,https://my.oschina.net/u/1462828/blog/866372java

如今我要优化这个现实效果,主要实现两点,1是底部菜单弹出来,2是背景半透明的黑色慢慢显现,即透明度0-1;android

代码很简单,就很少啰嗦了。ide

首先上工具类:工具

import android.animation.ValueAnimator;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;

import com.imxiaoyu.common.impl.OnBooleanListener;

/**
 * 动画辅助类
 * Created by XiaoYu on 2017/3/23.
 */

public class AnimatorUtils {


    /**
     * y轴渐变大小动画
     * @param v
     * @param start
     * @param end
     */
    public void startMove(View v, int start, int end) {
        startMove(v, start, end, null);
    }

    public void startMove(View v, int start, int end, final OnBooleanListener onBooleanListener) {
        ValueAnimator animator = createDropAnimator(v,
                start, end, onBooleanListener);
        animator.setDuration(300);//动画播放的时间
        animator.start();
    }

    private ValueAnimator createDropAnimator(final View v, final int start, final int end, final OnBooleanListener onBooleanListener) {
        ValueAnimator animator = ValueAnimator.ofInt(start, end);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

            @Override
            public void onAnimationUpdate(ValueAnimator arg0) {
                int value = (int) arg0.getAnimatedValue();
                ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
                layoutParams.height = value;
                v.setLayoutParams(layoutParams);
                if(value==end) {
                    //动画执行结束了
                    if (onBooleanListener != null) {
                        onBooleanListener.onClick(true);
                    }
                }
            }
        });
        return animator;
    }


    /**
     * 淡入淡出动画
     */
    public void startFadeInFadeOut(View view,float start,float end){
            if (null == view )
            {
                return;
            }
            AlphaAnimation mHideAnimation = new AlphaAnimation(start, end);
            mHideAnimation.setDuration(300);
            mHideAnimation.setFillAfter(true);
            view.startAnimation(mHideAnimation);
    }
}

而后是重写popupwindow的show方法和dismiss方法优化

public void show() {
        super.show();
        animatorUtils.startFadeInFadeOut(vBg, 0.0f, 1.0f);//背景渐变
        animatorUtils.startMove(llyMenu, 0, DensityUtils.dip2px(getActivity(), 456));
    }

    public void dismiss() {
        if(isClose==true){
            //当前是否正在隐藏,避免屡次触发动画
            return;
        }
        isClose=true;
        animatorUtils.startFadeInFadeOut(vBg, 1.0f, 0.0f);//背景渐变
        animatorUtils.startMove(llyMenu, DensityUtils.dip2px(getActivity(), 456), 0, new OnBooleanListener() {
            @Override
            public void onClick(boolean bln) {
                UtilsMenuPopupWindow.super.dismiss();
                //动画播放完了再隐藏
                isClose=false;
            }
        });
    }
相关文章
相关标签/搜索