美文网首页自定义控件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