代码设置Dialog的进入和退出动画

因项目对外发布的是JAR包,不能有资源文件,因此所有的界面和动画都不方便通过xml去写,都需要通过JAVA代码去生成。

进入动画的设置
重写Dialog的show()方法,getContentView()和getAnimation()需自定义,就是这么简单。

 @Override
    public void show() {
        mContentView = getContentView();
        setContentView(mContentView);
        setCancelable(false);
        super.show();
        if (mContentView != null) {
            mContentView.startAnimation(getAnimation());
        }
    }
      @Override
    public Animation getAnimation() {
        AnimationSet set = new AnimationSet(true);
        AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
        //ScaleAnimation scaleAnimation = new ScaleAnimation(0,1f,0,1f,
        //      Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        set.addAnimation(alphaAnimation);
        //  set.addAnimation(scaleAnimation);
        set.setDuration(500);
        return set;
    }

退出动画的设置
退出时的动画写法有点不一样,需要加一个listener如下:

  @Override
    public void dismiss() {

        if (mContentView != null){
            mContentView.startAnimation(getExitAnimation());
        }
         super.dismiss();
     }
      private Animation getExitAnimation() {
        AnimationSet set = new AnimationSet(true);
        AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
        set.addAnimation(alphaAnimation);
        set.setFillAfter(true);
        set.setDuration(500);
        set.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }
            @Override
            public void onAnimationEnd(Animation animation) {
                if (mContentView != null){
                //用view的post()方法不会报错,直接用super.dismiss()会报错的,你可以试试。
                    mContentView.post(new Runnable() {
                        @Override
                        public void run() {
                            UnsubscribeConfirmDialog.super.dismiss();
                        }
                    });
                }
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        return  set;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值