package com.yidianling.consultant.dialog import android.animation.Animator import android.animation.ObjectAnimator import android.app.Dialog import android.content.Context import android.os.Bundle import android.os.Handler import android.view.Gravity import android.view.View import android.view.WindowManager import com.ydl.ydlcommon.utils.SharedPreferencesEditor import com.yidianling.common.tools.RxImageTool import com.yidianling.consultant.R import com.yidianling.consultant.modular.singlton.ConsultAssistantDialogUtils import kotlinx.android.synthetic.main.consultant_expert_consult_assistant_popup_window.* /** * 咨询助理浮层 * Created by xj on 2019/10/30. */ class ConsultAssistantDialog( mContext: Context, val consultAssistantClickListener: OnConsultAssistantClickListener? ) : Dialog(mContext, R.style.consultant_expert_dialog_default_style) { private var animate: ObjectAnimator? = null private var minWidth: Int? = null 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) if (!ConsultAssistantDialogUtils.INSTANCE.canShowDesc()) { consultant_assistant_dialog_desc_ll.visibility = View.GONE consultant_assistant_dialog_desc_outside_ll.visibility = View.GONE refreshDialogLayout(ConsultAssistantDialogUtils.INSTANCE.minWidth) } consultant_assistant_dialog_close.setOnClickListener { if (minWidth == null) { minWidth = (consultant_assistant.measuredWidth * 1.5).toInt() } ConsultAssistantDialogUtils.INSTANCE.minWidth = minWidth!! //一个dialog关闭左侧desc,所有导医左侧desc都关闭 // SharedPreferencesEditor.putString( // ConsultAssistantDialogUtils.INSTANCE.ASSISTANT_DIALOG_SP_TAG, // System.currentTimeMillis().toString() // ) ConsultAssistantDialogUtils.isSHowDesc = false animate = ObjectAnimator.ofFloat( consultant_assistant_dialog_desc_ll, "translationX", 0.0f, consultant_assistant_dialog_desc_ll.measuredWidth.toFloat() ) animate?.setDuration(900)?.start() animate?.addListener(object : Animator.AnimatorListener { override fun onAnimationRepeat(animation: Animator?) { } override fun onAnimationEnd(animation: Animator?) { ConsultAssistantDialogUtils.INSTANCE.setDescHide() hide() // show() Handler().postDelayed({ show() }, 10) } override fun onAnimationCancel(animation: Animator?) { } override fun onAnimationStart(animation: Animator?) { } }) } consultant_assistant.setOnClickListener { consultAssistantClickListener?.onClickAction() } ll_desc_assistant.setOnClickListener { consultAssistantClickListener?.onClickAction() } setCanceledOnTouchOutside(false) } public fun setDescHide() { if (null != consultant_assistant_dialog_desc_ll) { consultant_assistant_dialog_desc_ll.visibility = View.GONE consultant_assistant_dialog_desc_outside_ll.visibility = View.GONE refreshDialogLayout(ConsultAssistantDialogUtils.INSTANCE.minWidth) } } // 刷新dialog布局,减小拦截点击区域 fun refreshDialogLayout(width: Int) { val params = window.attributes if (width != 0) { minWidth = width } else { minWidth = (RxImageTool.dp2px(60f) * 1.5).toInt() } 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 } interface OnConsultAssistantClickListener { fun onClickAction() } }