ConsultAssistantDialog.kt 4.73 KB
Newer Older
1 2 3
package com.yidianling.consultant.dialog


徐健 committed
4 5
import android.animation.Animator
import android.animation.ObjectAnimator
6 7 8
import android.app.Dialog
import android.content.Context
import android.os.Bundle
徐健 committed
9
import android.os.Handler
10
import android.view.Gravity
徐健 committed
11
import android.view.View
12
import android.view.WindowManager
徐健 committed
13
import com.ydl.ydlcommon.utils.SharedPreferencesEditor
14
import com.yidianling.common.tools.RxImageTool
15
import com.yidianling.consultant.R
徐健 committed
16
import com.yidianling.consultant.modular.singlton.ConsultAssistantDialogUtils
17 18 19 20 21 22 23
import kotlinx.android.synthetic.main.consultant_expert_consult_assistant_popup_window.*

/**
 * 咨询助理浮层
 * Created by xj on 2019/10/30.
 */

徐健 committed
24
class ConsultAssistantDialog(
徐健 committed
25
    mContext: Context,
徐健 committed
26
    val consultAssistantClickListener: OnConsultAssistantClickListener?
徐健 committed
27
) : Dialog(mContext, R.style.consultant_expert_dialog_default_style) {
徐健 committed
28 29

    private var animate: ObjectAnimator? = null
徐健 committed
30
    private var minWidth: Int? = null
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.consultant_expert_consult_assistant_popup_window)

        val params = window.attributes
        params.width = WindowManager.LayoutParams.WRAP_CONTENT
        params.height = WindowManager.LayoutParams.WRAP_CONTENT
        params.gravity = Gravity.RIGHT + Gravity.BOTTOM
        params.verticalMargin = 0.07f
        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE //不拦截外部点击事件
        window.attributes = params
        window.setDimAmount(0f)

        window.setWindowAnimations(R.style.consultant_expert_consult_assistant_dialog_animate)

徐健 committed
47
        if (!ConsultAssistantDialogUtils.INSTANCE.canShowDesc()) {
48
            consultant_assistant_dialog_desc_ll.visibility = View.GONE
徐健 committed
49
            consultant_assistant_dialog_desc_outside_ll.visibility = View.GONE
50
            refreshDialogLayout(ConsultAssistantDialogUtils.INSTANCE.minWidth)
徐健 committed
51 52 53
        }

        consultant_assistant_dialog_close.setOnClickListener {
徐健 committed
54 55 56
            if (minWidth == null) {
                minWidth = (consultant_assistant.measuredWidth * 1.5).toInt()
            }
57
            ConsultAssistantDialogUtils.INSTANCE.minWidth = minWidth!!
严久程 committed
58

徐健 committed
59
            //一个dialog关闭左侧desc,所有导医左侧desc都关闭
严久程 committed
60 61 62 63
//            SharedPreferencesEditor.putString(
//                ConsultAssistantDialogUtils.INSTANCE.ASSISTANT_DIALOG_SP_TAG,
//                System.currentTimeMillis().toString()
//            )
严久程 committed
64
            ConsultAssistantDialogUtils.isSHowDesc = false
徐健 committed
65 66 67 68 69 70 71
            animate = ObjectAnimator.ofFloat(
                consultant_assistant_dialog_desc_ll,
                "translationX",
                0.0f,
                consultant_assistant_dialog_desc_ll.measuredWidth.toFloat()
            )

徐健 committed
72
            animate?.setDuration(900)?.start()
徐健 committed
73 74
            animate?.addListener(object : Animator.AnimatorListener {
                override fun onAnimationRepeat(animation: Animator?) {
徐健 committed
75

徐健 committed
76 77 78 79
                }

                override fun onAnimationEnd(animation: Animator?) {
                    ConsultAssistantDialogUtils.INSTANCE.setDescHide()
徐健 committed
80 81 82 83 84
                    hide()
//                    show()
                    Handler().postDelayed({
                        show()
                    }, 10)
徐健 committed
85 86 87 88 89 90 91 92 93 94 95
                }

                override fun onAnimationCancel(animation: Animator?) {
                }

                override fun onAnimationStart(animation: Animator?) {
                }
            })
        }

        consultant_assistant.setOnClickListener {
96 97
            consultAssistantClickListener?.onClickAction()
        }
严久程 committed
98 99 100
        ll_desc_assistant.setOnClickListener {
            consultAssistantClickListener?.onClickAction()
        }
101 102 103 104

        setCanceledOnTouchOutside(false)
    }

徐健 committed
105
    public fun setDescHide() {
106
        if (null != consultant_assistant_dialog_desc_ll) {
徐健 committed
107 108
            consultant_assistant_dialog_desc_ll.visibility = View.GONE
            consultant_assistant_dialog_desc_outside_ll.visibility = View.GONE
109
            refreshDialogLayout(ConsultAssistantDialogUtils.INSTANCE.minWidth)
徐健 committed
110 111 112 113
        }
    }

    // 刷新dialog布局,减小拦截点击区域
114
    fun refreshDialogLayout(width: Int) {
徐健 committed
115
        val params = window.attributes
116 117 118 119

        if (width != 0) {
            minWidth = width
        } else {
徐健 committed
120
            minWidth = (RxImageTool.dp2px(60f) * 1.5).toInt()
徐健 committed
121
        }
122

徐健 committed
123 124 125 126 127 128 129
        params.width = minWidth!!
        params.height = WindowManager.LayoutParams.WRAP_CONTENT
        params.gravity = Gravity.RIGHT + Gravity.BOTTOM
        params.verticalMargin = 0.07f
        params.horizontalMargin = 0.01f
        window.setWindowAnimations(0)
        window.attributes = params
徐健 committed
130 131
    }

132
    interface OnConsultAssistantClickListener {
徐健 committed
133
        fun onClickAction()
134 135
    }
}