Android簡單的動畫使用

參考我之前的一篇博客,從底部彈出菜單,https://my.oschina.net/u/1462828/blog/866372

現在我要優化這個現實效果,主要實現兩點,1是底部菜單彈出來,2是背景半透明的黑色慢慢顯現,即透明度0-1;

代碼很簡單,就不多囉嗦了。

首先上工具類:


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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章