ConsultAssistantDialog.kt 5.48 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 16 17 18 19 20
import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.drawee.interfaces.DraweeController
import com.facebook.imagepipeline.common.ResizeOptions
import com.facebook.imagepipeline.common.RotationOptions
import com.facebook.imagepipeline.postprocessors.IterativeBoxBlurPostProcessor
import com.facebook.imagepipeline.request.ImageRequest
import com.facebook.imagepipeline.request.ImageRequestBuilder
21
import com.yidianling.common.tools.RxImageTool
22
import com.yidianling.consultant.R
徐健 committed
23
import com.yidianling.consultant.modular.singlton.ConsultAssistantDialogUtils
24 25
import kotlinx.android.synthetic.main.consultant_expert_consult_assistant_popup_window.*

26

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

徐健 committed
32
class ConsultAssistantDialog(
徐健 committed
33
    mContext: Context,
徐健 committed
34
    val consultAssistantClickListener: OnConsultAssistantClickListener?
徐健 committed
35
) : Dialog(mContext, R.style.consultant_expert_dialog_default_style) {
徐健 committed
36 37

    private var animate: ObjectAnimator? = null
徐健 committed
38
    private var minWidth: Int? = null
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

    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
55
        if (!ConsultAssistantDialogUtils.INSTANCE.canShowDesc()) {
56
            consultant_assistant_dialog_desc_ll.visibility = View.GONE
徐健 committed
57
            consultant_assistant_dialog_desc_outside_ll.visibility = View.GONE
58
            refreshDialogLayout(ConsultAssistantDialogUtils.INSTANCE.minWidth)
徐健 committed
59 60 61
        }

        consultant_assistant_dialog_close.setOnClickListener {
徐健 committed
62 63 64
            if (minWidth == null) {
                minWidth = (consultant_assistant.measuredWidth * 1.5).toInt()
            }
65
            ConsultAssistantDialogUtils.INSTANCE.minWidth = minWidth!!
严久程 committed
66

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

徐健 committed
80
            animate?.setDuration(900)?.start()
徐健 committed
81 82
            animate?.addListener(object : Animator.AnimatorListener {
                override fun onAnimationRepeat(animation: Animator?) {
徐健 committed
83

徐健 committed
84 85 86 87
                }

                override fun onAnimationEnd(animation: Animator?) {
                    ConsultAssistantDialogUtils.INSTANCE.setDescHide()
徐健 committed
88 89 90 91 92
                    hide()
//                    show()
                    Handler().postDelayed({
                        show()
                    }, 10)
徐健 committed
93 94 95 96 97 98 99 100 101 102
                }

                override fun onAnimationCancel(animation: Animator?) {
                }

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

103 104 105 106 107 108 109 110 111 112

        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
113
        consultant_assistant.setOnClickListener {
114 115
            consultAssistantClickListener?.onClickAction()
        }
严久程 committed
116 117 118
        ll_desc_assistant.setOnClickListener {
            consultAssistantClickListener?.onClickAction()
        }
119 120 121 122

        setCanceledOnTouchOutside(false)
    }

徐健 committed
123
    public fun setDescHide() {
124
        if (null != consultant_assistant_dialog_desc_ll) {
徐健 committed
125 126
            consultant_assistant_dialog_desc_ll.visibility = View.GONE
            consultant_assistant_dialog_desc_outside_ll.visibility = View.GONE
127
            refreshDialogLayout(ConsultAssistantDialogUtils.INSTANCE.minWidth)
徐健 committed
128 129 130 131
        }
    }

    // 刷新dialog布局,减小拦截点击区域
132
    fun refreshDialogLayout(width: Int) {
徐健 committed
133
        val params = window.attributes
134 135 136 137

        if (width != 0) {
            minWidth = width
        } else {
徐健 committed
138
            minWidth = (RxImageTool.dp2px(60f) * 1.5).toInt()
徐健 committed
139
        }
140

徐健 committed
141 142 143 144 145 146 147
        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
148 149
    }

150
    interface OnConsultAssistantClickListener {
徐健 committed
151
        fun onClickAction()
152 153
    }
}