MyTabLayout

MyTabLayout用法参照BaseLibrary的Demo
GitHub仓库地址

效果图

引入

gradle

allprojects {repositories {maven { url 'https://jitpack.io' }}
}implementation 'com.github.DL-ZhangTeng:BaseLibrary:2.3.0'

属性

MyTabLayout属性名 描述:可参考原生控件TabLayout
tabMyGravity GRAVITY_FILL充满屏幕、GRAVITY_CENTER居中
tabMyMode MODE_SCROLLABLE可滚动tab、MODE_FIXED固定tab
tabMyTypeface 未被选中tab文本样式
tabMySelectedTypeface 被选中tab文本样式
tabMyPaddingStart 居左Padding
tabMyTextColor 未选中文本颜色
tabMyPaddingEnd 居右Padding
tabMySelectedTextColor 被选中文本颜色
tabMyMaxWidth 最大宽度
tabMyBackground 背景色
tabMyTextAppearance 文本样式
tabMyContentStart tabs距TabLayout开始位置的偏移量,只有tabMyMode
tabMyMinWidth 最小宽度
tabMyPaddingBottom 距底部Padding
tabMyPaddingTop 距顶部Padding
tabMyPadding Padding
tabMyTextIconGap Text与Icon之间的margin
tabMyViewNumber tab数量
tabMySelectedTextSize 被选中文字大小
tabMyTextSize 未选中文字大小
tabMyTabViewSelf TabView自定义时宽度自适应
tabMyIndicatorWidth 指示器宽度(设置宽度后指示器Margin失效)
tabMyIndicatorHeight 指示器高度
tabMyIndicatorMarginLeft 指示器居左Margin
tabMyIndicatorMarginTop 指示器居顶部Margin
tabMyIndicatorMarginRight 指示器居右Margin
tabMyIndicatorMarginBottom 指示器居底部Margin
tabMyIndicatorSelfFit 指示器宽度自适应文本宽度(默认false)
tabMyIndicatorMarginBottomSelfFit 指示器自适应文本底部的距离(tabMyIndicatorSelfFit为true时生效,默认false)
tabMyIndicatorBottomLayer 指示器置于文本底部(默认false)
tabMyIndicatorColor 指示器颜色
tabMyIndicatorRoundRadius 指示器圆角
tabMyIndicatorDrawable 图片指示器,支持drawable与mipmap
tabMyIndicatorVerticalOffsets 指示器垂直滚动,String数组对应每一个tab的垂直偏移量(0.0:不进行垂直偏移;1.0:垂直偏移tab高度-指示器高度-垂直Margin)
tabMyIndicatorHorizontalOffsets 指示器水平滚动,String数组对应每一个tab的水平偏移量(0.0:不进行水平偏移;1.0:水平移tab宽度-指示器宽度-水平Margin)

示例

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.zhangteng.base.widget.MyTabLayoutandroid:id="@+id/tab_layout"android:layout_width="match_parent"android:layout_height="40dp"app:tabMyBackground="@color/colorWhite"app:tabMyIndicatorBottomLayer="false"app:tabMyIndicatorColor="#ff000000"app:tabMyIndicatorHeight="2dp"app:tabMyIndicatorMarginBottomSelfFit="false"app:tabMyIndicatorRoundRadius="2dp"app:tabMyIndicatorSelfFit="false"app:tabMyMode="MODE_SCROLLABLE"app:tabMyPaddingEnd="18dp"app:tabMyPaddingStart="18dp"app:tabMySelectedTextColor="#222222"app:tabMySelectedTextSize="16sp"app:tabMySelectedTypeface="NORMAL"app:tabMyTabViewSelf="true"app:tabMyTextColor="#999999"app:tabMyTextSize="14sp"app:tabMyTypeface="NORMAL" /><com.zhangteng.base.widget.MyTabLayoutandroid:id="@+id/tab_layout1"android:layout_width="match_parent"android:layout_height="40dp"app:tabMyBackground="@color/colorWhite"app:tabMyIndicatorBottomLayer="false"app:tabMyIndicatorColor="#00000000"app:tabMyIndicatorDrawable="@mipmap/ic_delete"app:tabMyIndicatorHeight="15dp"app:tabMyIndicatorMarginBottomSelfFit="false"app:tabMyIndicatorRoundRadius="2dp"app:tabMyIndicatorSelfFit="false"app:tabMyIndicatorWidth="15dp"app:tabMyMode="MODE_SCROLLABLE"app:tabMyPaddingEnd="18dp"app:tabMyPaddingStart="18dp"app:tabMySelectedTextColor="#222222"app:tabMySelectedTextSize="16sp"app:tabMySelectedTypeface="NORMAL"app:tabMyTabViewSelf="true"app:tabMyTextColor="#999999"app:tabMyTextSize="14sp"app:tabMyTypeface="NORMAL" /><com.zhangteng.base.widget.MyTabLayoutandroid:id="@+id/tab_layout2"android:layout_width="match_parent"android:layout_height="40dp"app:tabMyBackground="@color/colorWhite"app:tabMyIndicatorBottomLayer="false"app:tabMyIndicatorColor="#ff000000"app:tabMyIndicatorHeight="2dp"app:tabMyIndicatorMarginBottomSelfFit="false"app:tabMyIndicatorMarginLeft="5dp"app:tabMyIndicatorMarginRight="5dp"app:tabMyIndicatorRoundRadius="2dp"app:tabMyIndicatorSelfFit="false"app:tabMyMode="MODE_SCROLLABLE"app:tabMyPaddingEnd="18dp"app:tabMyPaddingStart="18dp"app:tabMySelectedTextColor="#222222"app:tabMySelectedTextSize="16sp"app:tabMySelectedTypeface="NORMAL"app:tabMyTabViewSelf="true"app:tabMyTextColor="#999999"app:tabMyTextSize="14sp"app:tabMyTypeface="NORMAL" /><com.zhangteng.base.widget.MyTabLayoutandroid:id="@+id/tab_layout3"android:layout_width="match_parent"android:layout_height="40dp"app:tabMyBackground="@color/colorWhite"app:tabMyIndicatorBottomLayer="true"app:tabMyIndicatorColor="#ff000000"app:tabMyIndicatorHeight="2dp"app:tabMyIndicatorMarginBottomSelfFit="true"app:tabMyIndicatorRoundRadius="2dp"app:tabMyIndicatorSelfFit="true"app:tabMyMode="MODE_SCROLLABLE"app:tabMyPaddingEnd="18dp"app:tabMyPaddingStart="18dp"app:tabMySelectedTextColor="#222222"app:tabMySelectedTextSize="16sp"app:tabMySelectedTypeface="NORMAL"app:tabMyTabViewSelf="true"app:tabMyTextColor="#999999"app:tabMyTextSize="14sp"app:tabMyTypeface="NORMAL" /><com.zhangteng.base.widget.MyTabLayoutandroid:id="@+id/tab_layout4"android:layout_width="match_parent"android:layout_height="40dp"app:tabMyBackground="@color/colorWhite"app:tabMyIndicatorBottomLayer="true"app:tabMyIndicatorColor="#ff000000"app:tabMyIndicatorHeight="2dp"app:tabMyIndicatorMarginBottomSelfFit="true"app:tabMyIndicatorRoundRadius="2dp"app:tabMyIndicatorSelfFit="true"app:tabMyMode="MODE_FIXED"app:tabMyPaddingEnd="18dp"app:tabMyPaddingStart="18dp"app:tabMySelectedTextColor="#222222"app:tabMySelectedTextSize="16sp"app:tabMySelectedTypeface="NORMAL"app:tabMyTabViewSelf="true"app:tabMyTextColor="#999999"app:tabMyTextSize="14sp"app:tabMyTypeface="NORMAL"app:tabMyViewNumber="5" /><com.zhangteng.base.widget.MyTabLayoutandroid:id="@+id/tab_layout5"android:layout_width="match_parent"android:layout_height="40dp"app:tabMyBackground="@color/colorWhite"app:tabMyIndicatorBottomLayer="true"app:tabMyIndicatorColor="#ff000000"app:tabMyIndicatorHeight="2dp"app:tabMyIndicatorMarginBottomSelfFit="true"app:tabMyIndicatorRoundRadius="2dp"app:tabMyIndicatorSelfFit="true"app:tabMyMode="MODE_FIXED"app:tabMySelectedTextColor="#222222"app:tabMySelectedTextSize="26sp"app:tabMySelectedTypeface="NORMAL"app:tabMyTabViewSelf="true"app:tabMyTextColor="#999999"app:tabMyTextSize="14sp"app:tabMyTypeface="NORMAL"app:tabMyViewNumber="5" /><com.zhangteng.base.widget.MyTabLayoutandroid:id="@+id/tab_layout6"android:layout_width="match_parent"android:layout_height="42dp"app:tabMyBackground="@color/colorWhite"app:tabMyIndicatorBottomLayer="false"app:tabMyIndicatorColor="#00000000"app:tabMyIndicatorDrawable="@mipmap/icon_match_event_goal_mini"app:tabMyIndicatorHeight="10dp"app:tabMyIndicatorHorizontalOffsets="@array/HorizontalOffset"app:tabMyIndicatorMarginBottomSelfFit="false"app:tabMyIndicatorRoundRadius="2dp"app:tabMyIndicatorSelfFit="false"app:tabMyIndicatorVerticalOffsets="@array/VerticalOffset"app:tabMyIndicatorWidth="10dp"app:tabMyMode="MODE_FIXED"app:tabMyPaddingEnd="18dp"app:tabMyPaddingStart="18dp"app:tabMySelectedTextColor="#222222"app:tabMySelectedTextSize="16sp"app:tabMySelectedTypeface="NORMAL"app:tabMyTabViewSelf="true"app:tabMyTextColor="#999999"app:tabMyTextSize="14sp"app:tabMyTypeface="NORMAL"app:tabMyViewNumber="5" /><com.zhangteng.base.widget.MyTabLayoutandroid:id="@+id/tab_layout7"android:layout_width="match_parent"android:layout_height="42dp"app:tabMyBackground="@color/colorWhite"app:tabMyIndicatorBottomLayer="false"app:tabMyIndicatorColor="#00000000"app:tabMyIndicatorDrawable="@mipmap/icon_match_event_goal_mini"app:tabMyIndicatorHeight="10dp"app:tabMyIndicatorHorizontalOffsets="@array/HorizontalOffset"app:tabMyIndicatorMarginBottomSelfFit="false"app:tabMyIndicatorRoundRadius="2dp"app:tabMyIndicatorSelfFit="false"app:tabMyIndicatorVerticalOffsets="@array/VerticalOffset"app:tabMyIndicatorWidth="10dp"app:tabMyMode="MODE_FIXED"app:tabMyPaddingEnd="18dp"app:tabMyPaddingStart="18dp"app:tabMySelectedTextColor="#222222"app:tabMySelectedTextSize="16sp"app:tabMySelectedTypeface="NORMAL"app:tabMyTabViewSelf="true"app:tabMyTextColor="#999999"app:tabMyTextSize="14sp"app:tabMyTypeface="NORMAL"app:tabMyViewNumber="5" /><androidx.viewpager.widget.ViewPagerandroid:id="@+id/vp"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>
package com.zhangteng.baselibrary.activityimport android.graphics.drawable.AnimationDrawable
import android.os.Bundle
import android.widget.ImageView
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.zhangteng.base.adapter.CommonFragmentAdapter
import com.zhangteng.base.base.BaseActivity
import com.zhangteng.base.widget.MyTabLayout
import com.zhangteng.base.widget.MyTabLayoutMediator
import com.zhangteng.baselibrary.R
import com.zhangteng.baselibrary.fragment.BaseDemoFragmentclass TabLayoutActivity : BaseActivity() {private var tab_layout: MyTabLayout? = nullprivate var tab_layout1: MyTabLayout? = nullprivate var tab_layout2: MyTabLayout? = nullprivate var tab_layout3: MyTabLayout? = nullprivate var tab_layout4: MyTabLayout? = nullprivate var tab_layout5: MyTabLayout? = nullprivate var tab_layout6: MyTabLayout? = nullprivate var tab_layout7: MyTabLayout? = nullprivate var vp: ViewPager? = nullprivate val titleList: Array<String?> =arrayOf("111111", "111111", "111111", "111111", "111111")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_tablayout)}override fun initView() {tab_layout = findViewById(R.id.tab_layout)tab_layout1 = findViewById(R.id.tab_layout1)tab_layout2 = findViewById(R.id.tab_layout2)tab_layout3 = findViewById(R.id.tab_layout3)tab_layout4 = findViewById(R.id.tab_layout4)tab_layout5 = findViewById(R.id.tab_layout5)tab_layout6 = findViewById(R.id.tab_layout6)tab_layout7 = findViewById(R.id.tab_layout7)vp = findViewById(R.id.vp)val fragments = ArrayList<Fragment>()fragments.add(BaseDemoFragment())fragments.add(BaseDemoFragment())fragments.add(BaseDemoFragment())fragments.add(BaseDemoFragment())fragments.add(BaseDemoFragment())vp?.adapter =CommonFragmentAdapter(supportFragmentManager,titleList,fragments)tab_layout?.setupWithViewPager(vp)tab_layout1?.setupWithViewPager(vp)tab_layout2?.setupWithViewPager(vp)tab_layout3?.setupWithViewPager(vp)tab_layout4?.setupWithViewPager(vp)tab_layout5?.setupWithViewPager(vp)//使用newTab()自定义Tabfor (position in titleList.indices) {val tab = tab_layout6?.newTab()tab?.let {val imageView = ImageView(this@TabLayoutActivity)setAnimation(imageView, position)tab.setCustomView(imageView)tab_layout6?.addTab(tab)if (position == 0) {val animationDrawable =(tab.getCustomView() as ImageView).drawable as AnimationDrawable?if (animationDrawable != null && !animationDrawable.isRunning) {animationDrawable.start()}}}}vp?.addOnPageChangeListener(MyTabLayout.TabLayoutOnPageChangeListener(tab_layout6))tab_layout6?.addOnTabSelectedListener(object : MyTabLayout.OnTabSelectedListener {override fun onTabSelected(tab: MyTabLayout.Tab?) {tab?.let {vp?.currentItem = tab.getPosition()val animationDrawable =(tab.getCustomView() as ImageView).drawable as AnimationDrawable?if (animationDrawable != null && !animationDrawable.isRunning) {animationDrawable.start()}}}override fun onTabUnselected(tab: MyTabLayout.Tab?) {tab?.let {setAnimation(tab.getCustomView() as ImageView, tab.getPosition())}}override fun onTabReselected(tab: MyTabLayout.Tab?) {tab?.let {setAnimation(tab.getCustomView() as ImageView, tab.getPosition())}}})//使用MyTabLayoutMediator自定义TabMyTabLayoutMediator(tab_layout7!!,vp!!,object : MyTabLayoutMediator.TabConfigurationStrategy {override fun onConfigureTab(tab: MyTabLayout.Tab, position: Int) {val imageView = ImageView(this@TabLayoutActivity)setAnimation(imageView, position)tab.setCustomView(imageView)if (position == 0) {val animationDrawable =(tab.getCustomView() as ImageView).drawable as AnimationDrawable?if (animationDrawable != null && !animationDrawable.isRunning) {animationDrawable.start()}}}}).attach()tab_layout7?.addOnTabSelectedListener(object : MyTabLayout.OnTabSelectedListener {override fun onTabSelected(tab: MyTabLayout.Tab?) {tab?.let {val animationDrawable =(tab.getCustomView() as ImageView).drawable as AnimationDrawable?if (animationDrawable != null && !animationDrawable.isRunning) {animationDrawable.start()}}}override fun onTabUnselected(tab: MyTabLayout.Tab?) {tab?.let {setAnimation(tab.getCustomView() as ImageView, tab.getPosition())}}override fun onTabReselected(tab: MyTabLayout.Tab?) {tab?.let {setAnimation(tab.getCustomView() as ImageView, tab.getPosition())}}})}override fun initData() {}private fun setAnimation(imageView: ImageView, position: Int) {when (position) {0 -> {imageView.setImageResource(R.drawable.tab_animation_1)}1 -> {imageView.setImageResource(R.drawable.tab_animation_2)}2 -> {imageView.setImageResource(R.drawable.tab_animation_3)}3 -> {imageView.setImageResource(R.drawable.tab_animation_4)}4 -> {imageView.setImageResource(R.drawable.tab_animation_5)}}}
}

足球Tab动画与偏移数组

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="true"><!-- animation-list 帧动画 --><!-- android:oneshot的值为 false代表播放多次,true代表只播放一次 --><!-- duration代表每张图片的播放时间 ,定义一个持续时间为50毫秒的动画帧 --><itemandroid:drawable="@mipmap/icon_match_1"android:duration="150" /><itemandroid:drawable="@mipmap/icon_match_2"android:duration="150" /><itemandroid:drawable="@mipmap/icon_match_3"android:duration="50" /><itemandroid:drawable="@mipmap/icon_match_4"android:duration="50" />
</animation-list>
<?xml version="1.0" encoding="utf-8"?>
<resources><string-array name="VerticalOffset"><item>0.258</item><item>0.258</item><item>0.254</item><item>0.760</item><item>0.258</item></string-array><string-array name="HorizontalOffset"><item>-0.058</item><item>-0.058</item><item>0.054</item><item>0.066</item><item>0.066</item></string-array>
</resources>

仿雷速体育app踢足球tab相关推荐

  1. android仿腾讯体育app,腾讯体育app

    腾讯体育是由腾讯出品的体育视频类软件,在软件中用户可以体验到最好用的体育视频软件,在这里你能看到各类比赛全赛季的视频,软件还拥有世界顶级的转播技术和团队,高清.多角度.虚拟技术,轻松满足球迷各种需求. ...

  2. 学计算机学体育生闺女,古力:生个女儿一定学围棋 生个儿子就去踢足球

    成都商报记者 张龑 摄影报道 核心提示 7夺围棋世界冠军的古力结婚了,这意味着他有了更多的责任. 婚后的古力做到了以家为重---"现在下完棋就回家,酒基本上不喝了,连唱歌这些娱乐都基本上取消 ...

  3. PP体育APP产品体验报告

    1 产品概述 1.1 体验环境 设备:SMARTISAN M1 系统版本: Android 6.0.1 时间:2018.10 APP版本:V5.4.2 体验人:hungpn 1.2 产品简介 PP体育 ...

  4. 自定义view--仿照 体育app,股票,基金,电商,区块链APP 数据信息栏展示(还没写完)

    我是个球迷,喜欢看各种篮球 足球比赛,所以手机里面也安装了各种体育类APP,之前就发现了一个有趣的自定义view,很多场景都能通用 比如: (虎扑)体育app,球队积分/比赛数据自定view 股票,基 ...

  5. android仿喜马拉雅APP状态栏,ReactNative+TypeScript仿喜马拉雅开发App(示例代码)

    ReactNative+TypeScript仿喜马拉雅开发App 融合RN的跨平台能力+TS的全新开发体验 使用RN + TS开发听书App,从需求分析,到功能实现,一步步带领大家完成功能,学会如何解 ...

  6. 纸飞机飞向温暖,踢足球凝聚真情

    8月6日,合肥工业大学软件学院西部之光,筑梦小队和残疾人服务站的老师以及残疾人学生在教室中开晨会.在会议中,老师们对前几日表现好的同学进行鼓励,对表现不好的同学进行批评指正他们的不足.在结束活动之后, ...

  7. 当会打王者荣耀的AI学会踢足球,一不小心拿下世界冠军!

    难得的元旦小假期,没有什么比得上在慵懒的冬日艳阳下放松自己,拿起手机,叫上了许久未一起作战的小伙伴,到王者荣耀中激战了一番,仿佛又回到了当年那个年轻的自己. 厉害不,毕竟当年DD也是王者五十星的水平, ...

  8. android动画送礼物,Android仿直播类app赠送礼物功能

    直播界面 实现的是播放本地的视频文件: /** * 直播界面,用于对接直播功能 */ public class LiveFrag extends Fragment { private ImageVie ...

  9. 小狗踢足球《即时通讯》

     [即时通讯论坛]2013年10月17日,吹拂我的面颊,俯视山下,爸爸还真把妈妈叫来了,一路艰险,爸爸成了村里有名的即时通讯筢耳朵,白色的水鸟偶尔点一下水面,兰妮公主已经走得筋疲力尽,不时有垂钓者 ...

  10. 仿IOS介绍APP下载页源码

    简介: 仿IOS介绍APP下载页源码 网盘下载地址: http://kekewangLuo.cc/etChSUGbyoU0 图片:

最新文章

  1. R语言命令行写linux,linux命令行下使用R语言绘图实例讲解
  2. mysql 与紫金桥_基于紫金桥组态软件与mysql数据库的连接简介
  3. boost::mp11::mp_find相关用法的测试程序
  4. .NET架构小技巧(2)——访问修饰符正确姿势
  5. [mybatis]Mapper XML Files_获取自增主键的值
  6. 不存在_施文忠 | ”存在“与“不存在”——巴蜀文明概论
  7. 关于增强(五)-Class Enhancement
  8. [Android] 年年有鱼手机主题
  9. c++ linux 获取毫秒_Linux c++获取本地毫秒级精确时间
  10. Flink : Flink JobManager报错 akka.pattern.AskTimeoutException: Ask timed out on
  11. 8.26~8.30-广州软件所-实习工作日记
  12. 高通又失一员大将,英特尔成功挖角高通CFO
  13. 物联网老年人健康管理系统源码
  14. 纵横iGoogle工具世界的程序发明王
  15. Switch模拟器调研
  16. FastqC结果简介
  17. android 加固服务器,服务器加固工具
  18. 后端接收Get请求与Post请求 参数示例
  19. phpwindexp.php,phpwind 5.0.1 Sql注射漏洞利用程序脚本安全 -电脑资料
  20. Label的属性、事件、方法

热门文章

  1. 图论介绍和PyTorch Geometric(PyG)库基础知识
  2. 【图神经网络】Pytorch图神经网络库——PyG基础操作
  3. drf接收、处理上传图片并写入文件
  4. iPhone全系列进入恢复模式方法
  5. Android进阶——借助强大Span家族增添丰富的特效及格式化字符串
  6. Java @Min(0)的意义
  7. Java 培训四个月能学会吗?
  8. 水波纹 android,Android特效之水波纹的实现
  9. PC上无法捕捉vlan tag的原因
  10. Qt2D游戏开发引擎QtGameEngine使用入门9——在游戏界面中添加gui按钮文本等控件