前言

自从安卓支持Fragment之后,TabHost(TabLayout)+ViewPager+Fragment 用于实现多个页面左右切换的功能被很多app采用,但是大多是对原生组件的应用或者简单封装,比如都是块状的,这里分享整理一个之前自己开发的一个圆角的TabLayout,对您如果有帮助的话github上给个星,喜欢一下本文吧!

正文

国际惯例先看图吧:

具体的思路就是通过集成一个水平布局的LinearLayout,难点就是要要与ViewPager的滚动速率一致,形成过渡效果,关键代码如下:

/*** 设置关联的ViewPager** @param viewPager*/
public void setupWithViewPager(ViewPager viewPager) {switchViewPager(viewPager);mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {mCurrentPosition = position;if (isEnabled()) {highLightTextView(position);}}@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {scroll(position, positionOffset);}@Overridepublic void onPageScrollStateChanged(int state) {}});initIndicatorDrawable();
}复制代码

重点看下ViewPager.OnPageChangeListener的onPageScrolled(int position, float positionOffset, int positionOffsetPixels)方法,以向右滑为例,positionOffset从0到1的增大过程对应的是滑动的比例,因此可以作为计算过渡的参数,代码如下:

public void scroll(int position, float offset) {if (getChildCount() == 0) return;View selectView = getChildAt(position);int width = selectView.getMeasuredWidth();if (width == 0) return;if (mIndicatorDrawable != null ){mIndicatorDrawable.setBounds(0, getPaddingTop(), width, getHeight() - getPaddingBottom());}mIndicatorTravelOffset = (int) (selectView.getX() + width * offset);invalidate();
}复制代码
复制代码

mIndicatorTravelOffset 保存了当前滑动tab的水平位置,在通过 invalidate();条用ondraw()方法,进而调用drawIndicatorVerticalPos()方法,如下:

protected void drawIndicatorVerticalPos(Canvas canvas) {if (mIndicatorDrawable != null) {canvas.save();canvas.translate(mIndicatorTravelOffset, 0);mIndicatorDrawable.draw(canvas);canvas.restore();}
}复制代码

通过 canvas.translate(mIndicatorTravelOffset, 0);实现实时绘制圆角。想通了整个过程实现还是蛮简单的。代码github,觉得对您有帮助就给个星吧!

码字不易,期待各位的赞赏!!!

Android 圆角TabLayout相关推荐

  1. android 圆角边框边框渐变,Android深度定制化TabLayout:圆角,渐变色,背景边框,圆角渐变下划线,基于Android原生TabLayout...

    Android深度定制化TabLayout:圆角,渐变色,背景边框,圆角渐变下划线,基于Android原生TabLayout 在附录1的基础上丰富自定义的TabLayout,这次增加两个内容: 1,当 ...

  2. android 圆角图片

    今天,简单讲讲Android圆角图片的使用. 最近,感觉好忙,换了工作,新的APP要重新阅读,对我是一个考验.所有这段时间的博客可能不会很详细了,因为我比较忙,而且还有很多内容要写.这篇写完后,我会写 ...

  3. android圆角视图_Android图库视图示例教程

    android圆角视图 Android Gallery is a View commonly used to display items in a horizontally scrolling lis ...

  4. android 画圆角背景颜色,android圆角矩形有背景颜色

    android圆角矩形,渐变颜色,自定义 首先,在drawable目录下写一个xml,名字随便起(只要符合规范),代码如下: android:shape="rectangle" & ...

  5. Android 解决Tablayout不显示标题,头部一片空白的问题

    前言 Android 解决Tablayout不显示标题,头部一片空白的问题 如果你也是一样的问题 那么请往下看 可能我们的问题是一样导致的 效果 解决思路 最近在项目中到了 TabLayout+Vie ...

  6. android 圆角效果

    android 圆角效果 最近做一个效果,要一个上边两个角为圆角,下面两个角为直角的四边形白色背景: 如下图: 这里用到了shape属性中的corners 属性, api原文中是这样: <cor ...

  7. Android的TabLayout未铺满如何解决

    继上次Android设置TabLayout及下划线宽度 后发现有个问题没补充 最近在修改界面时,发现之前的TabLayout宽度没撑满,并且设置了TabLayout.MODE_FIXED也没有生效,T ...

  8. android 圆角边框有灰,Android开发笔记——圆角和边框们

    在做Android界面开发时,我们往往希望它尽可能优美,尽可能显得专业.于是你看了看其他应用,哇,好多边框和圆角啊.你是不是也想给自己的应用加上边框和圆角效果?呃--那怎么做呢?如果你是从web前端跑 ...

  9. Android 圆角圆形ImageView(超简单实现)

    前言:今天偶然看到我之前写过的一篇博客 Android项目中遇到的坑之(Android圆角圆形图 一),我在想,这不就是在模仿ImageView么,我为什么要模仿,直接拿来用不是更好么?我能直接在Im ...

最新文章

  1. R语言ggplot2可视化:ggplot2可视化散点图并使用geom_mark_circle函数在数据簇或数据分组的数据点周围添加圆圈进行注释(自定义圆圈的大小)
  2. redis缓存穿透,缓存击穿,缓存雪崩
  3. 源码安装 odoo12 -- 问题记录
  4. HTML之列表学习-9.23
  5. 爱普生SCARA机器人参考文档列表
  6. 基于android的课程画图设计,基于Android的智能终端通信勘察设计系统绘图模块的设计与实现...
  7. sql2000数据类型对应的数值_Qlikview---数据类型
  8. 4.大数据架构详解:从数据获取到深度学习 --- 数据获取
  9. 阶段3 2.Spring_03.Spring的 IOC 和 DI_10 构造函数注入
  10. stm32中的ISP一键下载原理分析
  11. excel熵值法计算权重_评价得分计算:确立权重的方法
  12. java jbutton方法_java-如何设置JButton的大小?
  13. 云计算销售和传统销售有什么区别
  14. linux下搭建DNS域名解析服务器
  15. 餐饮管理系统哪个好用?
  16. SvnAnt authentication cancelled 的解决
  17. Rk3588 Rk3588s对比
  18. Android集成微信支付SDK,实现支付功能
  19. 如何把pdf转换成excel转换器免费使用
  20. 一个执行计划异常变更的案例 - 外传之SQL Profile(上)

热门文章

  1. axios-引入-常用语法-源码
  2. P2550 [AHOI2001]彩票摇奖
  3. Iterator(迭代器)
  4. 7-42 行编辑器 (10 分)
  5. 7-45 银行业务队列简单模拟 (10 分)
  6. 基于顺序存储结构的图书信息表的创建和输出(C++)
  7. 华为云平台创建产品+注册设备
  8. Docker容器管理
  9. Android学习笔记View的工作原理
  10. Dream------scala--开发环境搭建