自定义ViewPager指示器动效从分析到实现

本文详细介绍了如何实现一个自定义的ViewPager指示器,包括动效的拆解分析和具体实现步骤。通过监听ViewPager滑动,计算并绘制RoundRect的大小和颜色过渡,实现了指示器的平滑切换效果。
摘要由CSDN通过智能技术生成

准备工作

  最近接到需求,要实现一个ViewPager的指示器。拿到视觉稿,就三个小点感觉分分钟的事。然而,仔细一看发现不简单啊,要实现顺滑切换,两种颜色自然过渡还需要体力。
这里写图片描述
* 对动效进行拆解分析

  第一个点切换到第二个点时,第一个点往右缩短,第二个点往右增长;同时第一个点由红色平滑过渡到蓝色,第二个点反之。注:点的消长随手势方向,但消长的边有所不同

  • 大体思路

  实现原理很简单,就是画图、动效细节需要花时间调。三个点用RoundRect画,监听ViewPager的滑动;传入滑动距离,根据滑动距离计算RoundRect的left/right值实现消长;同时根据滑动距离比例计算过渡颜色值,给画笔赋值过渡颜色。

动手开撸

  • 监听ViewPager

  这些动效的动作来源当然是ViewPager了。我们需要监听到ViewPager的滑动比例positionOffset及切换position,position决定圆点的切换方向,positionOffset*圆点间距mDistance就是圆点的消长距离了;然后重新绘图,形成动效。

viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    //记录上一次滑动的positionOffsetPixels值
    private int lastValue = -1;

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        boolean isLeft = mIsLeft;
        if (lastValue / 10 > positionOffsetPixels / 10) {
            //右滑
            isLeft = false;
        } else if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值