package com.yidianling.consultant.preview import android.animation.ObjectAnimator import android.annotation.SuppressLint import android.graphics.Color import android.os.Bundle import android.view.View import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentStatePagerAdapter import androidx.viewpager.widget.ViewPager import com.ydl.ydlcommon.modular.ModularServiceManager import com.ydl.ydlcommon.utils.StatusBarUtils import com.yidianling.consultant.R import com.yidianling.consultant.preview.GPreviewBuilder.IndicatorType import com.yidianling.consultant.preview.SmoothImageView.onTransformListener import com.yidianling.im.api.listener.ApiStringResponseCallback import com.yidianling.im.api.service.IImService import kotlinx.android.synthetic.main.consultant_image_preview_photo.* import kotlinx.android.synthetic.main.fragment_image_photo_layout.* import java.util.* /** * @author rainb */ class GPreviewActivity : AppCompatActivity() { protected var isTransformOut = false /*** 图片的地址 */ private var imgUrls: MutableList<IThumbViewInfo>? = null /*** 当前图片的位置 */ protected var currentIndex = 0 /***指示器类型枚举 */ private var type: IndicatorType? = null /***默认显示 */ private var isShow = true private var toUid: String? = null private var doctorId: String? = null /*** * 得到PhotoViewPager * @return PhotoViewPager */ /*** 展示图片的viewPager */ var viewPager: PhotoViewPager? = null private set /*** 图片的展示的Fragment */ private var fragments: MutableList<BasePhotoFragment>? = ArrayList() private var backIv: View? = null private var btnLL: View? = null private var titleBar: View? = null private var selectPosition: TextView? = null private var total: TextView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) initData() setContentView(R.layout.consultant_image_preview_photo) setWindowStatusBarColor() initView() } /** * 初始化状态栏位置 */ private fun setWindowStatusBarColor() { StatusBarUtils.Companion.setWindowStatusBarColor(this, R.color.black) StatusBarUtils.Companion.setStatusBarLightMode(this, false) } private fun initView() { viewPager = findViewById(R.id.viewPager) //viewPager的适配器 val adapter = PhotoPagerAdapter(supportFragmentManager) viewPager?.adapter = adapter viewPager?.currentItem = currentIndex backIv = findViewById(R.id.ivBack) btnLL = findViewById(R.id.btnLL) selectPosition = findViewById(R.id.select_position) total = findViewById(R.id.total) titleBar = findViewById(R.id.titleBar) chatBtn.setOnClickListener { if (!toUid.isNullOrBlank()) { ModularServiceManager.provide(IImService::class.java) .startChat(this@GPreviewActivity, toUid.toString(), 0x001, 0, 0, false) Timer().schedule(object : TimerTask() { override fun run() { runOnUiThread { if (fragments != null && currentIndex < fragments!!.size) { fragments!![currentIndex].stopVideo() } } } }, 2000) } } bookingBtn.setOnClickListener { ModularServiceManager.provide(IImService::class.java) .showConsultServiceDialog(activity = this, toUid = toUid!!, doctorId = doctorId!!) } backIv?.setOnClickListener(View.OnClickListener { transformOutAnim() transformOut() }) selectPosition?.setText((currentIndex + 1).toString() + "") total?.setText(if (imgUrls == null) "0" else imgUrls!!.size.toString() + "") viewPager?.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrolled( position: Int, positionOffset: Float, positionOffsetPixels: Int ) { } override fun onPageSelected(position: Int) { currentIndex = position; selectPosition?.setText((position + 1).toString() + "") } override fun onPageScrollStateChanged(state: Int) {} }) // viewPager.setOffscreenPageLimit(3); } override fun onResume() { super.onResume() if (toUid != null) { //在uid用户类型确定为专家的情况下,根据uid调用接口判断是进入专家私聊还是助理私聊 try { ModularServiceManager.provide(IImService::class.java) .getChatUid(context = this, uid = toUid!!, callback = object : ApiStringResponseCallback { override fun onUidCallback(uid: String) { val unReadNum = ModularServiceManager.provide(IImService::class.java) .getUnReadByUid(uid!!) when { unReadNum <= 0 -> { un_read_num_ll.visibility = View.GONE } unReadNum > 99 -> { un_read_num_ll.visibility = View.VISIBLE un_read_num.text = "99" } else -> { un_read_num_ll.visibility = View.VISIBLE un_read_num.text = unReadNum.toString() } } } }) } catch (e: Exception) { } } } private fun initData() { imgUrls = intent.getParcelableArrayListExtra("imagePaths") currentIndex = intent.getIntExtra("position", -1) type = intent.getSerializableExtra("type") as IndicatorType isShow = intent.getBooleanExtra("isShow", true) toUid = intent.getStringExtra("toUid") doctorId = intent.getStringExtra("doctorId") val isScale = intent.getBooleanExtra("isScale", false) SmoothImageView.setIsScale(isScale) initFragment(imgUrls, currentIndex, BasePhotoFragment::class.java) } private fun initFragment( imgUrls: List<IThumbViewInfo>?, currentIndex: Int, className: Class<BasePhotoFragment> ) { if (imgUrls != null) { val size = imgUrls.size for (i in 0 until size) { fragments!!.add( BasePhotoFragment.getInstance( className, imgUrls[i], currentIndex == i, intent.getBooleanExtra("isSingleFling", false), intent.getBooleanExtra("isDrag", false), intent.getFloatExtra("sensitivity", 0.5f) ) ) } } else { finish() } } override fun onDestroy() { ZoomMediaLoader.getInstance().loader.clearMemory(this) if (viewPager != null) { viewPager!!.adapter = null viewPager!!.clearOnPageChangeListeners() viewPager!!.removeAllViews() viewPager = null } if (fragments != null) { fragments!!.clear() fragments = null } if (imgUrls != null) { imgUrls!!.clear() imgUrls = null } super.onDestroy() } /*** * 得到PhotoViewPager * @return PhotoViewPager */ @JvmName("getViewPager1") fun getViewPager(): PhotoViewPager? { return viewPager } fun transformOut() { if (isTransformOut) { return } viewPager!!.isEnabled = false isTransformOut = true val currentItem = viewPager!!.currentItem if (currentItem < imgUrls!!.size) { if (imgUrls!![currentItem].sourcesType == 1) { val fragment = fragments!![currentItem] fragment.changeBg(Color.TRANSPARENT) fragment.transformOut(onTransformListener { getViewPager()?.setEnabled(true) exit() }) } else if (imgUrls!![currentItem].sourcesType == 2) { exitNormal() } } else { exit() } } /** * 关闭页面 */ private fun exit() { finish() overridePendingTransition(0, 0) } private fun exitNormal() { finish() } override fun onBackPressed() { isTransformOut = false transformOutAnim() transformOut() } override fun finish() { // BasePhotoFragment.listener=null; super.finish() } /** * pager的适配器 */ private inner class PhotoPagerAdapter internal constructor(fm: FragmentManager?) : FragmentStatePagerAdapter(fm!!) { override fun getItem(position: Int): Fragment { return fragments!![position] } override fun getCount(): Int { return if (fragments == null) 0 else fragments!!.size } } fun hindView() { titleBar!!.visibility = View.GONE btnLL!!.visibility = View.GONE } fun showView() { titleBar!!.visibility = View.VISIBLE btnLL!!.visibility = View.VISIBLE } @SuppressLint("ObjectAnimatorBinding") fun transformOutAnim() { val animator1 = ObjectAnimator.ofFloat(titleBar, "alpha", 1.0f, 0.0f) animator1.duration = 200 animator1.start() val animator2 = ObjectAnimator.ofFloat(btnLL, "alpha", 1.0f, 0.0f) animator2.duration = 200 animator2.start() } }