美文网首页android
安卓自定义对话框(弹出框)并添加显示动画

安卓自定义对话框(弹出框)并添加显示动画

作者: 蓝不蓝编程 | 来源:发表于2020-08-08 09:36 被阅读0次

    效果图

    image

    关键代码

    1. 自定义对话框
    class MyDialog(context: Context) : Dialog(context) {
        init {
            setContentView(R.layout.dialog_layout)
            setCanceledOnTouchOutside(false)
            setAnimationsBottomUp()
        }
    
        private fun setAnimationsBottomUp() {
            window?.setWindowAnimations(R.style.dialogAnimBottomUp)
        }
    }
    
    1. 在styles.xml中添加如下内容:
    <style name="dialogAnimBottomUp" mce_bogus="1" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/dialog_enter_anim</item>
        <item name="android:windowExitAnimation">@anim/dialog_exit_anim</item>
    </style>
    
    1. 在res下创建anim目录,并创建如下两个文件:
    1. dialog_exit_anim.xml
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:duration="500"
            android:fromYDelta="0%p"
            android:interpolator="@android:anim/accelerate_interpolator"
            android:toYDelta="100%p" />
    </set>
    
    1. dialog_enter_anim.xml
    <?xml version="1.0" encoding="utf-8"?><!-- 弹出时动画 -->
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:duration="500"
            android:fromYDelta="100%p"
            android:interpolator="@android:anim/accelerate_interpolator"
            android:toYDelta="0%p" />
    </set>
    

    完整源代码

    https://gitee.com/cxyzy1/custom_dialog

    附录

    还有一种实现对话框动画显示的方式,就是通过控制整个视图来进行动画显示.

    简要代码:

    class BottomDialogWithAnim1(context: Context) : Dialog(context, R.style.common_dialog) {
        init {
            setContentView(R.layout.dialog_bottom_anim1)
            changeDialogStyle()
            showWithMoveAnim(rootLayout)
        }
    
        /**
         * 动画方式显示,从底部向上显示出来。
         * 如果其他想要其他方式,则修改里面的animation实现即可。
         */
        private fun showWithMoveAnim(srcView: View) {
            val animateTime = 300L
            val animation = TranslateAnimation(0f, 0f, getWindowHeight(context) - srcView.height.toFloat(), 0f)
            animation.fillAfter = true
            animation.duration = animateTime
            srcView.startAnimation(animation)
        }
    
        private fun getWindowHeight(context: Context): Int {
            val point = Point()
            val manager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
            val display = manager.defaultDisplay
            if (Build.VERSION.SDK_INT > 16) {
                display.getRealSize(point)
            } else {
                display.getSize(point)
            }
    
            return Point(point).y
        }
    
    
        /**
         * 设置dialog居下占满屏幕
         */
        private fun changeDialogStyle() {
            window?.let {
                val params = it.attributes
                if (params != null) {
                    params.height = ViewGroup.LayoutParams.WRAP_CONTENT
                    params.width = ViewGroup.LayoutParams.MATCH_PARENT
                    params.gravity = Gravity.BOTTOM
                    it.attributes = params
                }
            }
        }
    }
    

    完整源代码

    https://gitee.com/cxyzy1/custom_dialog


    安卓开发入门教程系列汇总

    安卓发展历程及前景

    安卓发展历程
    安卓开发前景展望

    初探安卓

    安装开发工具
    创建第一个安卓工程

    开发语言学习

    Kotlin语言基础

    UI控件学习系列

    UI控件_TextView
    UI控件_EditText
    UI控件_Button
    UI控件_ImageView
    UI控件_RadioButton
    UI控件_CheckBox
    UI控件_ProgressBar


    关注头条号,第一时间获取最新文章:


    相关文章

      网友评论

        本文标题:安卓自定义对话框(弹出框)并添加显示动画

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