优化了事件面板的整体展示tab切换功能

This commit is contained in:
董宏宇
2020-08-10 17:16:06 +08:00
parent 811b9b93de
commit 585be68dab
5 changed files with 90 additions and 83 deletions

View File

@@ -1,17 +1,10 @@
package com.mogo.module.v2x.fragment
import android.content.res.ColorStateList
import android.graphics.Typeface
import android.view.Gravity
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
import android.widget.RadioGroup
import androidx.fragment.app.Fragment
import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
import com.google.android.material.tabs.TabLayoutMediator
import com.google.android.material.tabs.TabLayoutMediator.TabConfigurationStrategy
import com.mogo.commons.mvp.MvpFragment
import com.mogo.module.v2x.R
import com.mogo.module.v2x.V2XConst.MODULE_NAME
@@ -36,12 +29,6 @@ class V2XEventPanelFragment : MvpFragment<V2XEventPanelFragment, EventPanelPrese
private var mediator: TabLayoutMediator? = null
private val activeColor: Int = android.graphics.Color.parseColor("#FFFFFF")
private val normalColor: Int = android.graphics.Color.parseColor("#65FFFFFF")
private val activeSize = 20
private val normalSize = 20
private var selectPosition = 0
companion object {
@@ -56,7 +43,7 @@ class V2XEventPanelFragment : MvpFragment<V2XEventPanelFragment, EventPanelPrese
}
override fun initViews() {
Logger.d(MODULE_NAME, "EventPanelFragment init view===")
Logger.d(MODULE_NAME, "事件面板初始化……")
fragments = arrayOf(
V2XScenarioHistoryFragment(),
SurroundingEventFragment(),
@@ -65,67 +52,38 @@ class V2XEventPanelFragment : MvpFragment<V2XEventPanelFragment, EventPanelPrese
//禁用预加载
vpEventPanel.offscreenPageLimit = ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT
vpEventPanel.adapter = V2XEventPagerAdapter(this, fragments!!)
//viewPager 页面切换监听
vpEventPanel.registerOnPageChangeCallback(changeCallback)
vpEventPanel.isUserInputEnabled = false; //true:滑动false禁止滑动
/*TabLayout中间分界线*/
val linearLayout: LinearLayout = tabLayout.getChildAt(0) as LinearLayout
linearLayout.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE
linearLayout.dividerDrawable = activity?.let { ContextCompat.getDrawable(it, R.drawable.bg_v2x_event_live_show) }
linearLayout.dividerPadding = 30
val radioGroup = findViewById<View>(R.id.rgTabSelect) as RadioGroup?
radioGroup!!.setOnCheckedChangeListener { group, checkedId ->
when (checkedId) {
R.id.rbScenarioHistory -> {
vpEventPanel.setCurrentItem(0, false)
}
R.id.rbSurroundingEvent -> {
vpEventPanel.setCurrentItem(1, false)
}
R.id.rbShareEvents -> {
vpEventPanel.setCurrentItem(2, false)
}
}
}
//这里可以自定义TabView
mediator = TabLayoutMediator(tabLayout, vpEventPanel, TabConfigurationStrategy { tab, position ->
val tabView = TextView(context)
tabView.gravity = Gravity.CENTER
val states = arrayOfNulls<IntArray>(2)
states[0] = intArrayOf(android.R.attr.state_selected)
states[1] = intArrayOf()
val colors = intArrayOf(activeColor, normalColor)
val colorStateList = ColorStateList(states, colors)
tabView.text = tabsTitle[position]
tabView.textSize = normalSize.toFloat()
tabView.typeface = Typeface.DEFAULT_BOLD
tabView.setTextColor(colorStateList)
tab.customView = tabView
})
//要执行这一句才是真正将两者绑定起来
mediator!!.attach()
btnHidePanels.setOnClickListener {
hidePanel()
}
btnShowOrHidePanels.setOnClickListener {
if (clPanelContainer.visibility == View.GONE) {
showPanel()
// 选中指定的Tab
tabLayout.getTabAt(selectPosition)?.select()
vpEventPanel.setCurrentItem(selectPosition, false)
} else {
hidePanel()
}
}
}
private val changeCallback: OnPageChangeCallback = object : OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
selectPosition = position
//可以来设置选中时tab的大小
val tabCount = tabLayout.tabCount
for (i in 0 until tabCount) {
val tab = tabLayout.getTabAt(i)
val tabView = tab!!.customView as TextView?
if (tab.position == position) {
tabView!!.textSize = activeSize.toFloat()
tabView.typeface = Typeface.DEFAULT_BOLD
} else {
tabView!!.textSize = normalSize.toFloat()
tabView.typeface = Typeface.DEFAULT
}
}
}
}
override fun onDestroyView() {
mediator?.detach()
vpEventPanel?.unregisterOnPageChangeCallback(changeCallback)
super.onDestroyView()
}