Dialog实现从底部弹出、从左到右滑入滑出等动画

在dialog中添加如下代码:

    // 动画持续的时间
    private final int mAnimDuration = 250;
    // 显示按钮布局的动画
    private ObjectAnimator mShowAnim = null;
    // 隐藏按钮布局的动画
    private ObjectAnimator mHideAnim = null;
    // 屏幕参数对象
    private DisplayMetrics mDm = null;

 /**
     * 初始化显示和隐藏动画
     */
    private void initAnim() {
        /** 初始化显示动画 */
        mShowAnim = ObjectAnimator.ofFloat(ll_root, "translationX", (int) (mDm.widthPixels * 0.8), 0);
        mShowAnim.setDuration(mAnimDuration);
        mShowAnim.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationEnd(Animator animation) {
                // 动画结束之后,设置背景View可点击
                tvMycourseTotal.setClickable(true);
            }

            @Override
            public void onAnimationStart(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }
        });
        /**初始化隐藏动画  */
        mHideAnim = ObjectAnimator.ofFloat(ll_root, "translationX", 0, (int) (mDm.widthPixels * 0.8));
        mHideAnim.setDuration(mAnimDuration);
        mHideAnim.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationEnd(Animator animation) {
                // 动画结束之后,设置背景View可点击,并隐藏dialog
                tvMycourseTotal.setClickable(true);
                dismiss();
            }

            @Override
            public void onAnimationStart(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }
        });
    }

其中  ll_root为Dialog的根布局。

在显示Dialog的时候调用:

mShowAnim.start();   即在show()方法中调用

在关闭Dialog的时候调用:

mHideAnim.start();  在dismiss()方法之前调用

原理解析:在显示dialog的时候让根布局实现从右到左滑入的动画,即可。在dismiss()之前让dialog的根布局先实现从右向左滑入的动画,在动画监听结束的时候,调用dialog的dismiss()方法,即可。

以此类推,我们可以自定义实现各种显示、隐藏的动画,只需要改变(mShowAnim、mHideAnim)动画的设置即可。

我们知道在Activity和PopWindow都可以设置style写translate的xml文件实现,dialog并没有设置style的方法,设置了也不起作用,只能用动画实现了。

猜你喜欢

转载自blog.csdn.net/qq_34198206/article/details/87860992