
1定义弹出的dialog样式
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/mbtn"
        android:text="拨号"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="10sp"
        android:background="#8E8989"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/mbtn"
        android:text="10086"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="10sp"
        android:background="#8E8989"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/mbtn"
        android:text="取消"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="10sp"
        android:background="#8E8989"/>
</LinearLayout>

2自定义dialog类,继承自Dialog,并加载自定义dialog的布局
package com.njupt.animination
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup
class MyDiaglog:Dialog {
    constructor(context: Context?):this(context,0){}
    constructor(context: Context?,themId:Int):super(context!!,themId){
        //在此方法里面加载布局
        setContentView(R.layout.my_dialog)
        //设置在下面弹出
        window?.setGravity(Gravity.BOTTOM)
        //设置弹出的大小
        window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT)
    }
}
3在anim资源文件中定义出dialog的进出动画
入场位置dialog_enter.xml
<?xml version="1.0" encoding="utf-8"?>
<!--平移-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="400"
    android:fromYDelta="100%p"
    android:toYDelta="0">
    
</translate>
出场位置dialog_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="400"
    android:fromYDelta="0"
    android:toYDelta="100%p">
</translate>
4在style文件中指定这两种进出动画,并且将窗口的背景设为透明#00000000
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--指定dialog的样式-->
    <style name="dialog" parent="@android:style/Theme.Dialog">
        <!--指定dialog的动画-->
        <item name="windowNoTitle">true</item>
        <item name="android:windowAnimationStyle">@style/dialog_anim</item>
        <item name="android:windowBackground">@drawable/transparent</item>
    </style>
    <!--动画的央视-->
    <style name="dialog_anim" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/dialog_enter</item>
        <item name="android:windowExitAnimation">@anim/dialog_exit</item>
    </style>
    <style name="mbtn">
        <item name="android:textColor">@color/white</item>
        <item name="android:textSize">16sp</item>
    </style>
</resources>
其中透明颜色在color.xml布局中
<resources>
    <drawable name="transparent">#00000000</drawable>
</resources>
5在主程序中调用显示dialog
package com.njupt.animination
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
class MainActivity : AppCompatActivity() {
    private val mdialog:MyDiaglog by lazy {
        MyDiaglog(this,R.style.dialog)
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val btn=findViewById<Button>(R.id.btn1)
        btn.setOnClickListener(){
            mdialog.show()
        }
    }
}



















