美文网首页自定义控件Android专题UI
自定义Dialog添加“显示背景变暗+消失恢复亮度”效果

自定义Dialog添加“显示背景变暗+消失恢复亮度”效果

作者: 千夜零一 | 来源:发表于2020-10-10 10:44 被阅读0次
    退出app.jpeg

    引言

      之前我做了自定义Dialog弹出框,但我发现在实际的使用中其颜色会与背景白色显示相冲突,不会凸显出自定义Dialog弹出框的白色背景效果。而非自定义的Dialog它本身自带弹出时背景颜色变暗+消失时背景颜色恢复的效果,我就在想如何自定义实现这个效果呢?
      于是,通过动画,实现了渐变色效果,当弹出Dialog时,除弹出提示框外的主布局背景逐渐暗化;当Dialog消失时,主布局背景逐渐恢复原色。主要通过控制主布局背景的透明度来实现。


    实现效果

    退出app背景变暗.gif

    传送门

    [兄弟篇]自定义Dialog实现“退出应用程序”效果


    新增自定义方法:两个

    /**
     * 设置透明度
     */
    private void setBackgroundAlpha(float bgAlpha) {
        WindowManager.LayoutParams lp = ((Activity) mContext).getWindow().getAttributes();
        lp.alpha = bgAlpha;
        ((Activity) mContext).getWindow().setAttributes(lp);
    }
    /**
     * 显示弹窗,过程中伴随背景逐渐变暗。
     * 不要改变MaskLayout的背景色,否则会是灰色背景的框框整体向上升起的效果。
     */
    public void show(View parent) {
        ValueAnimator animator = ValueAnimator.ofFloat(1, 0.5f).setDuration(500);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                setBackgroundAlpha((Float) animation.getAnimatedValue());
            }
        });
        animator.start();
    }
    

    具体如何调用

    自定义SelfDialog类中(以下三步都是)

    (1)首先声明

    //上下文环境
    Context mContext;
    View contentView;
    

    (2)在构造函数中的逻辑代码

    public SelfDialog(@NonNull Context context) {
            super(context, R.style.MyDialog); //构造方法中设置Dialog的样式
            this.mContext = context;
            contentView = LayoutInflater.from(mContext).inflate(R.layout.popup_select_layout, null);
            /**
             *  显示Dialog时背景变暗,消失时恢复亮度
             */
            setOnDismissListener(new DialogInterface.OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialog) {
                    ValueAnimator animator = ValueAnimator.ofFloat(0.5f, 1f).setDuration(500);
                    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                        @Override
                        public void onAnimationUpdate(ValueAnimator animation) {
                            setBackgroundAlpha((Float) animation.getAnimatedValue());
                        }
                    });
                    animator.start();
                }
            });
        }
    

    (3)同样在SelfDialog类中重写的onCreate方法中调用show(View parent)方法进行显示。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mydialog_layout);
        ......
        ......
        show(contentView);
    }
    

    这样就可以实现“显示背景变暗+消失恢复亮度”的动画效果啦!

    相关文章

      网友评论

        本文标题:自定义Dialog添加“显示背景变暗+消失恢复亮度”效果

        本文链接:https://www.haomeiwen.com/subject/evudpktx.html