android 水平滑动分页指示器_Android ViewPager指示器

在很多常见的app中都有使用指示器,别的不说,简书app顶部就是一个指示器啦,那么指示器这种效果该怎么做呢?步骤有以下几点:

1、构建布局。你的指示器应该长什么样子,在界面中的什么位置,它应该有多少个页面(即有多少个tab选项卡),你给它设计的滑动跟随的东西是三角形还是一杠?

2、自定义控件。虽然不用自定义控件貌似也能做出指示器的效果,但这样你就需要对多个控件单独控制,一个tab的内容就是一个TextView,还有外层的LinearLayout等,你应该怎样来做控制?滑动跟随的效果你打算给谁绘制?这些都是一个个现实的问题。但是自定义控件不同,你想怎么搞就怎么搞,想绘制什么就绘制什么,关键你可以把以上提到的多个控件放到自定义控件中,作为一个控件来直接控制,你说这样的操作爽不爽。

3、画UI,指示器我们采用自定义控件来做,因此指示器即tab部分就用自定义控件了,然后是指示器的主体(即ViewPager)我们直接使用v4包中的ViewPager控件即可。

4、设计分页页面。这里说的分页页面就是一个个的Fragment,指示器来回切换不同的界面内容并不是一直在不断的切换Activity,而是在一个Activity中不断地换页,就好比:一个Activity就是一本书,每个Fragment都是一页一页的纸,不管你怎么翻页,都还是在这本书中。Fragment数量对应tab的数量,Fragment呈现的内容由你自己定义,你可以和Activity一样创建布局文件,在里面放你想展示的内容。

走完以上4步ViewPager应该可以动了。

5、滑动跟随的标志。这个东西完全是自己绘制的东西,app中最常见的就是三角形和一杠,其他的就自己去画吧。这个涉及到自定义绘制的内容。其实弄明白了顺序也不是很难。首先在构造函数中初始化画笔,在合适的地方创建Path类对象即路径,然后通过mPath.moveTo(x,y)将路径起点移动到(x,y)处,然后通过mPath..lineTo(a,b)把线直接从点(x,y)连到(a,b)处,绘制完路径之后在重写的dispatchDraw方法中调整一下画布然后通过drawPath方法绘制一下路径即可。

6、滑动跟随。滑动ViewPager页面让滑动跟随标志同步运动起来?这里面的原理其实很简单,我们之前不是在画布上绘制了滑动跟随标志吗?你只要对画布做平移看起来的效果不就是标志移动了吗。在你翻页的同时平移画布就能实现通过运动了。

7、指示器tab联动。当我们的tab如果超出一个界面所能显示的个数的时候(即你有10个tab,但一次只能显示3个tab),我们都知道每个tab都是自定义控件中的子控件TextView,如果你定了10个,那么默认效果是10一次显示在一个界面中。这样并不是我们所理想的效果。这时候又要说到绘制的问题了,这里的每个TextView的宽度我们在自定义控件类中改参数,用屏幕宽度来除以3(假设你一次只想显示3个tab),这样就定下来每个tab的宽度占屏幕的1 / 3了,超出部分自然不会显示。

8、点击tab切换page页。这个很简单,只要通过循环把所有的TextView加上一个点击事件即可。然后在点击时间的回调函数中调用ViewPager的setCurrentItem(position),这样在你电机的同时才会切换至相应的pager页面,否则只是普通的点击事件。

9、tab文字高亮。很简单。在此之前我们应该先获得所有的TextView并把他们的字体颜色全部覆盖掉,免得等下影响效果。然后我们点击的那个TextView由于我们是通过循环来设置点击事件的,因此我们可以通过循环变量 i 来确定当前点击的tab的索引,只需要在每次循环中使用final int j = i,然后在点击回调中使用 j 来做逻辑即可。拿到 j 后不就可以拿到对应的TextView吗通过getChildAt(j),然后设置字体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值