Viewpager的PageTransformer 不执行问题

修复Viewpager PageTransformer不执行的bug
在项目中使用Viewpager实现滑动大图并带有影院效果时,遇到PageTransformer动画初次显示不执行的问题。原因是旧版android-support-v4.jar的bug。解决方案包括升级jar包或在代码中手动调用transformPage方法。手动调用的代码示例已给出。

因为项目需求,要实现滑动大图且带影院效果,效果如下图所示:
这里写图片描述
使用Viewpager来实现的,因为通过实现PageTransformer 接口,比较容易实现左右滑动的动画效果。由于项目里使用的android-support-v4.jar版本太老了 ,只有377kb,肯定小于android-support-v4 version13.0.0,此jar包有个bug,就是初次显示viewpager时,动画效果没有执行(默认只有滑动时动画才会执行到),这样就导致两张图片连在一起,没有突出中间一张的效果了,如下图:
这里写图片描述
问题的解决方法本来很简单,就是用个高版本的jar包(support-v4-18.0.0及以上都可以)替换老的jar包就行了。
这里写图片描述
但是项目里一旦替换了jar,就会报65536那个错误,就是方法数太多了,没办法,只能投机取巧,在使用现有的老jar包基础上去改掉这个bug,最终的解决办法是,加载完数据后,手动调用一遍以下代码:
if (mAdapter.getCount() > 1)
{
mTransformer.transformPage(mViewPager.getChildAt(1), 1);
}
当然当只有一条数据时,也就不存在这个bug了。
mTransformer的实现如下:

public class ScalePagerTransformer implements ViewPager.PageTransformer
{

    public static final float MAX_SCALE = 1.0f;

    public static final float MIN_SCALE = 0.75f;

    public static final float MIN_ALPHA = 0.3f;

    @Override
    public void transformPage(View page, float position)
    {
        if (position < -1)
        {
            position = -1;
        }
        else if (position > 1)
        {
            position = 1;
        }

        float tempScale = position < 0 ? 1 + position : 1 - position;

        float slope = (MAX_SCALE - MIN_SCALE) / 1;
        // 一个公式
        float scaleValue = MIN_SCALE + tempScale * slope;
        page.setScaleX(scaleValue);
        page.setScaleY(scaleValue);
        if (position > -1 && position < 1)
        {
            // 加渐变透明效果,中间的view完全不透明
            page.setAlpha((1 - MIN_ALPHA) * tempScale + MIN_ALPHA);
        }
        else
        {
            page.setAlpha(MIN_ALPHA);
        }

        if (Build.VERSION.SDK_INT < 19 && page.getParent() != null)
        {
            page.getParent().requestLayout();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值