专栏首页恩蓝脚本Android自定义view实现标签栏功能(只支持固定两个标签)

Android自定义view实现标签栏功能(只支持固定两个标签)

实现效果图

主要代码

完整源代码

class TabView(context: Context, attributeSet: AttributeSet?) : LinearLayout(context, attributeSet) {
private lateinit var firstTab: View
private lateinit var secondTab: View
private val firstTabIndex = 0
private val secondTabIndex = 1
private var selectedTab = firstTabIndex
private val textSize = 20f
private val bottomSplitColor = "#FA871E"
private val centerSplitColor = "#666666"
private val bottomSplitWidth = 50
private val bottomSplitHeight = 4
private val centerSplitWidth = 1
private val centerSplitHeight = 40
private lateinit var mOnSwitchListener: OnSwitchListener
fun initTabs(
firstTabText: String,
secondTabText: String,
selectedIndex: Int,
onSwitchListener: OnSwitchListener
) {
mOnSwitchListener = onSwitchListener
setOrientation()
firstTab = addTab(firstTabText)
addCenterSplit()
secondTab = addTab(secondTabText)
selectTab(selectedIndex)
setOnClickListener { switchTab() }
}
interface OnSwitchListener {
fun onSwitched(selectedIndex: Int)
}
private fun selectTab(tabIndex: Int) {
if (tabIndex == firstTabIndex) {
firstTab.visibility = View.VISIBLE
secondTab.visibility = View.INVISIBLE
} else {
firstTab.visibility = View.INVISIBLE
secondTab.visibility = View.VISIBLE
}
selectedTab = tabIndex
}
private fun switchTab() {
if (selectedTab == firstTabIndex) {
selectTab(secondTabIndex)
} else {
selectTab(firstTabIndex)
}
mOnSwitchListener.onSwitched(selectedTab)
}
private fun setOrientation() {
orientation = HORIZONTAL
}
private fun getBottomSplitView(): View {
val view = View(context)
view.setBackgroundColor(Color.parseColor(bottomSplitColor))
return view
}
private fun getBottomSplitLayoutParams(): LayoutParams {
val layoutParams = LayoutParams(bottomSplitWidth, bottomSplitHeight)
layoutParams.setMargins(3, 3, 3, 3)
layoutParams.gravity = Gravity.CENTER_HORIZONTAL
return layoutParams
}
private fun addCenterSplit() {
val view = View(context)
view.setBackgroundColor(Color.parseColor(centerSplitColor))
addView(view, getCenterSplitLayoutParams())
}
private fun getCenterSplitLayoutParams(): LayoutParams {
val layoutParams = LayoutParams(centerSplitWidth, centerSplitHeight)
layoutParams.setMargins(3, 0, 3, 0)
layoutParams.gravity = Gravity.CENTER_VERTICAL
return layoutParams
}
private fun addTab(text: String): View {
var linearLayout = LinearLayout(context)
linearLayout.orientation = VERTICAL
val textView = getTextView(text)
linearLayout.addView(
textView,
LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
)
val splitView = getBottomSplitView()
linearLayout.addView(splitView, getBottomSplitLayoutParams())
addView(linearLayout, LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT))
return splitView
}
private fun getTextView(text: String): TextView {
val textView = TextView(context)
textView.text = text
textView.setPadding(10, 10, 10, 10)
textView.textSize = textSize
return textView
}
}

https://gitee.com/cxyzy1/custTabView

总结

到此这篇关于Android自定义view实现标签栏功能(只支持固定两个标签)的文章就介绍到这了,更多相关android自定义view标签栏内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android 实现抖音小游戏潜艇大挑战的思路详解

    《潜水艇大挑战》是抖音上的一款小游戏,以面部识别来驱动潜艇通过障碍物,最近特别火爆,相信很多人都玩过。

    砸漏
  • 教你五分钟实现Android超漂亮的刻度轮播控件实例教程

    最近一直在做音视频的工作,已经有大半年没有写应用层的东西了,生怕越来越生疏。正好前段时间接了个外包项目,才得以回顾一下。项目中有一个控件挺简洁漂亮的,而且用到的...

    砸漏
  • Android实现雷达View效果的示例代码

    这是一个仿雷达扫描的效果,是之前在做地图sdk接入时就想实现的效果,但之前由于赶着毕业设计,就没有亲手去实现,不过现在自己撸一个发现还是挺简单的。

    砸漏
  • Android 实现抖音小游戏潜艇大挑战的思路详解

    《潜水艇大挑战》是抖音上的一款小游戏,以面部识别来驱动潜艇通过障碍物,最近特别火爆,相信很多人都玩过。

    砸漏
  • javafx框架tornadofx实战-舒尔特1

    用户6167008
  • 数字化转型下的混合云,此“混合”非彼“混合”也

    既然,如今大部分企业的系统或多或少都应用了某种形式的云服务,即“混合”已成常态,那么“混合云”本身就不应该再被视为是一种独立的体系结构。 尽管情况确实如此,但这...

    人称T客
  • 更快更安全,HTTPS 优化总结

    在网站升级到 HTTPS 之后,我们还可以有很多玩意可以折腾,优化 HTTPS,让它更快更安全。这里是一篇 HTTPS 优化的总结,也包含问题的解决方法,不过不...

    程序员宝库
  • js手机号码校验正则

    〆 千寻、
  • DELL/EMC的 PowerScale和ECS在CDP私有云基础版的认证迈出了下一步

    Cloudera与Dell / EMC保持了长期而成功的合作伙伴关系,为混合云中运行的分析工作负载开发共享存储解决方案。

    大数据杂货铺
  • Python入门基础知识

    4.python是解释型语言,但为了提高运行速度,使用了一种编译的方法。编译以后得到pyc文件,存储了字节码(特定于Python的表现形式,不是机器码)。

    python学习教程

扫码关注云+社区

领取腾讯云代金券