You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现三星音乐App风格的自定义TabLayout技术咨询

问题:实现三星音乐风格的Scrollable TabLayout

现有TabLayout的问题

默认设置为scrollable模式的TabLayout,选中标签的指示器位置不固定,选中第一个标签时指示器会贴在屏幕最左侧,不符合需求。

目标效果(参考三星音乐App的TabLayout)

  • 选中标签始终位于屏幕中央
  • 首尾标签不贴靠屏幕边缘
  • 切换时带有缩放动画:选中的Tab移开时缩小,未选中的Tab被选中时放大

已尝试但无效的方案

  • 给首尾Tab添加内边距和外边距,没有效果;已通过透明颜色移除指示器,能在选中/取消选中的回调中修改文本大小和字体,但无法实现滑动过程中的实时缩放效果
  • 给Tab项设置OnTouchListener,试图根据移动方向修改文本缩放比例,但触摸事件触发几次后就停止,且没法给所有经过屏幕中央的Tab添加缩放效果

实验代码(存在缺陷,非推荐方案)

contentBinding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
    override fun onTabSelected(tab: TabLayout.Tab?) {
        if (tab != null) {
            Log.d("TAB_LAYOUT", "onTabSelected: "+tab.text)
            //tab.view. ...
            // Set huge text size and font
        }
    }

    override fun onTabUnselected(tab: TabLayout.Tab?) {
        if (tab != null) {
            Log.d("TAB_LAYOUT", "onTabUnselected: "+tab.text)
            //tab.view. ...
            // Set normal unselected text size and font
        }
    }

    override fun onTabReselected(tab: TabLayout.Tab?) {
        if (tab != null) {
            Log.d("TAB_LAYOUT", "onTabReselected: "+tab.text)
            //tab.view. ...
            // Set huge text size and font
        }
    }
})

for (i in 0..4){
    val mytab = contentBinding.tabLayout.getTabAt(i)
    mytab?.view?.setOnTouchListener(object : View.OnTouchListener {
        override fun onTouch(v: View?, event: MotionEvent?): Boolean {
            Log.d("TAB_ITEM_ALL"+i, "onTouch: "+event.toString())
            if (event != null) {
                if(event.action == ACTION_MOVE)
//                            if(event.x > prevX){
//                              moving away logic
//                            }
//                            else{
//                              moving towards
//                            }
                    return false
            }
            return false
        }
    })
}

咨询需求

想请教实现该风格TabLayout的可行方法,是否应该使用动画或平移等手段来达成需求?

内容的提问来源于stack exchange,提问作者Vikram Baliga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:05:16