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


徐健 committed
4 5
import android.animation.Animator
import android.animation.ObjectAnimator
6 7
import android.app.Dialog
import android.content.Context
8
import android.net.Uri
9
import android.os.Bundle
徐健 committed
10
import android.os.Handler
11
import android.view.Gravity
徐健 committed
12
import android.view.View
13
import android.view.WindowManager
14 15
import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.drawee.interfaces.DraweeController
16
import com.yidianling.common.tools.RxImageTool
17
import com.yidianling.consultant.R
徐健 committed
18
import com.yidianling.consultant.modular.singlton.ConsultAssistantDialogUtils
19 20
import kotlinx.android.synthetic.main.consultant_expert_consult_assistant_popup_window.*

21

22 23 24 25 26
/**
 * 咨询助理浮层
 * Created by xj on 2019/10/30.
 */

徐健 committed
27
class ConsultAssistantDialog(
徐健 committed
28
    mContext: Context,
徐健 committed
29
    val consultAssistantClickListener: OnConsultAssistantClickListener?
徐健 committed
30
) : Dialog(mContext, R.style.consultant_expert_dialog_default_style) {
徐健 committed
31
    private var animate: ObjectAnimator? = null
徐健 committed
32
    private var minWidth: Int? = null
33 34 35 36 37

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

38 39 40 41 42 43 44 45
        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)
46

47
        window?.setWindowAnimations(R.style.consultant_expert_consult_assistant_dialog_animate)
48

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

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

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

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

徐健 committed
78 79 80
                }

                override fun onAnimationEnd(animation: Animator?) {
81 82 83 84 85 86 87 88
                    if (ownerActivity != null) {
                        ConsultAssistantDialogUtils.INSTANCE.setDescHide()
                        hide()
                        Handler().postDelayed({
                            show()
                        }, 10)
                    }

徐健 committed
89 90 91 92 93 94 95 96 97 98
                }

                override fun onAnimationCancel(animation: Animator?) {
                }

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

99 100 101 102 103 104 105 106 107 108

        val controller: DraweeController = Fresco.newDraweeControllerBuilder()
            .setUri(Uri.parse("res://drawable/"+R.drawable.consultant_assistant_dialog_img))
            .setOldController(consultant_assistant.controller)
            .setAutoPlayAnimations(true) // 是否自动播放Gif动画
            .build()
        consultant_assistant.controller = controller



徐健 committed
109
        consultant_assistant.setOnClickListener {
110 111
            consultAssistantClickListener?.onClickAction()
        }
严久程 committed
112 113 114
        ll_desc_assistant.setOnClickListener {
            consultAssistantClickListener?.onClickAction()
        }
115 116 117 118

        setCanceledOnTouchOutside(false)
    }

徐健 committed
119
    public fun setDescHide() {
120
        if (null != consultant_assistant_dialog_desc_ll) {
徐健 committed
121 122
            consultant_assistant_dialog_desc_ll.visibility = View.GONE
            consultant_assistant_dialog_desc_outside_ll.visibility = View.GONE
123
            refreshDialogLayout(ConsultAssistantDialogUtils.INSTANCE.minWidth)
徐健 committed
124 125 126 127
        }
    }

    // 刷新dialog布局,减小拦截点击区域
128
    fun refreshDialogLayout(width: Int) {
129
        val params = window?.attributes
130

131 132
        minWidth = if (width != 0) {
            width
133
        } else {
134
            (RxImageTool.dp2px(60f) * 1.5).toInt()
徐健 committed
135
        }
136

137 138 139 140 141 142 143
        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
144 145
    }

146
    interface OnConsultAssistantClickListener {
徐健 committed
147
        fun onClickAction()
148 149
    }
}