如何实现带滚动前剩余时间显示的Android ViewPager自动滚动指示器
带自动滚动倒计时进度的ViewPager指示器实现方案
无第三方依赖自定义实现
- 自定义容器控件,每个页面对应一个横向进度条,默认进度为0
- 绑定ViewPager页面切换监听,页面选中时启动对应进度条的线性属性动画,动画时长和你设置的自动滚动间隔完全一致
- 动画自然结束时触发ViewPager切页逻辑,切页后重置上一个进度条进度,启动下一个选中页的进度动画
- 处理手动滑动场景:用户手指按下ViewPager时暂停当前动画,手指抬起后从当前进度继续剩余时长的动画
核心代码示例:
// autoScrollDuration为你配置的自动滚动间隔,单位毫秒 private fun launchPageCountdown(currentPosition: Int) { // 清空上一轮动画 countdownAnim?.cancel() // 重置所有进度条状态 progressList.forEach { it.progress = 0 } countdownAnim = ValueAnimator.ofInt(0, 100).apply { duration = autoScrollDuration interpolator = LinearInterpolator() addUpdateListener { anim -> progressList[currentPosition].progress = anim.animatedValue as Int } addListener(object : Animator.AnimatorListener { override fun onAnimationEnd(p0: Animator?) { // 自动切到下一页,超过总页数时回到第一页 viewPager.currentItem = (currentPosition + 1) % totalPageCount } override fun onAnimationStart(p0: Animator?) = Unit override fun onAnimationCancel(p0: Animator?) = Unit override fun onAnimationRepeat(p0: Animator?) = Unit }) start() } }
基于现有指示器库改造
如果不想自己处理ViewPager绑定逻辑,可直接基于常用的MagicIndicator库做改造,只需要自定义PagerTitleView,在内部嵌入进度条并加上上述倒计时动画逻辑即可,原有库已经封装好了和ViewPager/ViewPager2的适配逻辑,改动量很小。
效果参考


内容的提问来源于stack exchange,提问作者pvn
相关产品推荐
相关产品推荐

