文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android自定义View Flyme6的Viewpager指示器

2022-06-06 04:35

关注

最新更新的Flyme6整体效果不错,动画效果增加了很多了,看了看flyme6的Viewpager指示器,觉得有点意思,就模仿写了一下,整体效果如下:

Gradle

JitPack v1.0.2


allprojects {
 repositories {
  maven { url 'https://jitpack.io' }
 }
}
dependencies {
 compile 'com.github.Dawish:FlymeTabStrip:v1.0.2'
}

Attrs


 <declare-styleable name="FlymeTabStrip">
  <!-- 指示器高度 -->
  <attr name="indicatorHeight" format="dimension" />
  <!-- 指示器滑动条颜色 -->
  <attr name="indicatorColor" format="color" />
  <!-- 指示器左右间距 -->
  <attr name="indicatorMargin" format="dimension" />
  <!-- 指示器文字颜色 -->
  <attr name="indicatorTextColor" format="color" />
  <!-- 指示器文字大小 -->
  <attr name="indicatorTextSize" format="dimension" />
  <!-- 指示器文字被选中后的大小 -->
  <attr name="selectedIndicatorTextSize" format="dimension" />
 </declare-styleable>

Sample

Demo地址:https://github.com/Dawish/FlymeTabStrip/tree/master/samples

代码解释

指示器的动画效果,主要依赖Viewpager的滑动监听器,在Viewpager的滑动过程中不断重绘只是控件就可以实现指示器的位移和缩放动画效果。首先我们讲解一下ViewPager的三个滚动监听方法:


 
 private class PagerStateChangeListener implements OnPageChangeListener {
  
  @Override
  public void onPageScrollStateChanged(int state) {
   if (state == ViewPager.SCROLL_STATE_IDLE) { // 0 空闲状态 pager处于空闲状态
    scrollToChild(viewPager.getCurrentItem(), 0);
   }else if(state == ViewPager.SCROLL_STATE_SETTLING){ // 2 正在自动沉降,相当于松手后,pager恢复到一个完整pager的过程
   }else if(state == ViewPager.SCROLL_STATE_DRAGGING){ // 1 viewpager正在被滑动,处于正在拖拽中
   }
  }
  
  @Override
  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
   currentPosition = position;
   currentPositionOffset = positionOffset;
   // 处理指示器下方横线的滚动,scrollToChild会不断调用ondraw方法,绘制在重绘下划线,这就是移动动画效果
   scrollToChild(position, (int) (positionOffset * container.getChildAt(position).getWidth()));
   invalidate();
  }
  
  @Override
  public void onPageSelected(int position) {
   // 滚动结束后的未知
   selectedPosition = position;
   // 更新指示器状态
   updateTabStyle();
  }
 }

其中最主要的方法就是:


  
  @Override
  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
   currentPosition = position;
   currentPositionOffset = positionOffset;
   // 处理指示器下方横线的滚动,scrollToChild会不断调用ondraw方法,绘制在重绘下划线,这就是移动动画效果
   scrollToChild(position, (int) (positionOffset * container.getChildAt(position).getWidth()));
   invalidate();
  }

github地址:https://github.com/Dawish/FlymeTabStrip

您可能感兴趣的文章:Android 中 viewpager 滑动指示器的实例代码Android开发实现的ViewPager引导页功能(动态加载指示器)详解Android自定义ViewPagerIndicator实现炫酷导航栏指示器(ViewPager+Fragment)Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigureView控件Android实现带指示器的自动轮播式ViewPagerAndroid自定义ViewPager指示器Android应用中仿今日头条App制作ViewPager指示器Android应用中使用ViewPager和ViewPager指示器来制作Tab标签TabLayout实现ViewPager指示器的方法


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯