AlertDialog 基本使用与动画处理

基本使用

  • 创建builder
    AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.myAlertDialog);
  • 创建并注入view

View view = LayoutInflater.from(this).inflate(R.layout.dialog_note_color_tips, null);
builder.setView(view);

对view进行操作

  • 展示

AlertDialog dialog= builder.create();
dialog .show

升级用法

  • 添加弹框位置设置
    在show之后调用

Window dialogWindow = mNotesColorTipsDialog.getWindow();
dialogWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.gravity = Gravity.CENTER;
lp.width = 400;
dialogWindow.setAttributes(lp);

-增加动画

dialogWindow.setWindowAnimations(R.style.dialogWindowAnimUp);

整体代码如下:

if (mNotesColorTipsDialog == null) {
    
    
            AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.myAlertDialog);
            View view = LayoutInflater.from(this).inflate(R.layout.dialog_note_color_tips, null);
            builder.setView(view);
            builder.setCancelable(false);
            mNotesColorTipsDialog = builder.create();
            Button button = view.findViewById(R.id.btn);
            button.setOnClickListener(new View.OnClickListener() {
    
    
                @Override
                public void onClick(View v) {
    
    
                    mNotesColorTipsDialog.dismiss();
                }
            });
            checkBox = view.findViewById(R.id.cb);
            checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
    
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    
    
                    SharedPreferencesHelper.getSpInstance(mContext).put(Constants.NOTE_COLOR_TIP_SHOW, !isChecked);
                    if (isChecked) {
    
    
                        checkBox.setTextColor(getResources().getColor(R.color.purple));
                    } else {
    
    
                        checkBox.setTextColor(getResources().getColor(R.color.gray));
                    }
                }
            });
        }
        checkBox.setChecked(!show);

        mNotesColorTipsDialog.show();
        Window dialogWindow = mNotesColorTipsDialog.getWindow();
        dialogWindow.setWindowAnimations(R.style.dialogWindowAnimUp);
        dialogWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        lp.gravity = Gravity.CENTER;
        lp.width = 400;
        dialogWindow.setAttributes(lp);

动画增加插值器

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/anticipate_interpolator">
<translate
    android:duration="1000"
    android:fromYDelta="0"
    android:toYDelta="-100%" />
</set>

几个插值器的介绍:

java类 xml资源id 说明
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator 其变化开始和结束速率较慢,中间加速
AccelerateInterpolator @android:anim/accelerate_interpolator 其变化开始速率较慢,后面加速
DecelerateInterpolator @android:anim/decelerate_interpolator 其变化开始速率较快,后面减速
LinearInterpolator @android:anim/linear_interpolator 其变化速率恒定
AnticipateInterpolator @android:anim/anticipate_interpolator 其变化开始向后甩,然后向前
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator 其变化开始向后甩,然后向前甩,过冲到目标值,最后又回到了终值
OvershootInterpolator @android:anim/overshoot_interpolator 其变化开始向前甩,过冲到目标值,最后又回到了终值
BounceInterpolator @android:anim/bounce_interpolator 其变化在结束时反弹
CycleInterpolator @android:anim/cycle_interpolator 循环播放,其速率为正弦曲线
TimeInterpolator 一个接口,可以自定义插值器

两步实现弹框圆角透明背景

  • 设置透明样式,创建时传入即可实现透明背景
<style name="myAlertDialog" parent="Theme.MaterialComponents.Dialog.Alert">
        <item name="android:background">@android:color/transparent</item>
    </style>
  • 然后在布局文件里添加圆角背景
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="@drawable/bg_corner"//设置圆角背景
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="wrap_content">

猜你喜欢

转载自blog.csdn.net/ligaoyuan8030/article/details/103765507