android Viewpager PageTransformer 笔记

viewpager 滑动切换页面的时候可以实现各种有趣的效果主要通过ViewPager.PageTransformer这个类来实现

例如:

public class MyPagerTransFormer implements ViewPager.PageTransformer {

    @Override
    public void transformPage(View page, float position) {

        if (position == 0){
            page.setAlpha(1);
        }else if (position < 0){
            page.setAlpha( 1 - Math.abs(position));
            page.setPivotX(page.getMeasuredWidth() / 2);
            page.setPivotY(page.getMeasuredHeight());
            page.setRotation(20 * position);
        }else if (position > 0){
            page.setAlpha(1 - Math.abs(position));
            page.setPivotX(page.getMeasuredWidth() / 2);
            page.setPivotY(page.getMeasuredHeight());
            page.setRotation(20 * position);
        }

    }
}

其中 transformPage 这个方法有两个参数, 第一个表示当前的页面, 第二个表示切换的时候一个进度值

当position = 0 的时候表示在当前页面也就是停在的这个页面

当我们从页面向左滑动到B页面的时候

这个时候A 从0到-1 B 从 1 到 0 

我们可以通过 page.getMeasuredWidth() 和 page.getMeasuredHeight()来获取宽高做响应的变换

 

扩展:

我们有时候可以看到viewpager在页面上面显示一个半的这种效果

1.首先需要在viewpager 上面都加上 android:clipChildren="false" .

2.网上有资料说setClipChildren(false)在3.0以上版本中,开启了硬件加速后将不能正常工作,所以需要将其设置为软件加速。设置软硬件加速使用 setLayerType(View.LAYER_TYPE_SOFTWARE, null); 也可以在布局文件中添加 android:layerType=”software” (这个方法还没有实际去尝试过)

3.还有网上有些说要加 android:layout_marginRight 和 android:layout_marginLeft 这两个属性,这两个我尝试了过后两边留很大空白实际没有达到效果,重要的还是要重写pagerAdapter里面的

@Override
public float getPageWidth(int position) {
    return (float) 0.8;
}

这个方法,返回值表示显示的比例;

但是这种方法加载到最后一页的时候 postion 的值并不能达到临界值,所以感觉不是很可取

4.记得设置setOffscreenPageLimit(3); 不然切换的时候页面显示会很突兀

5.设置setPageMargin控制两个页面之间的间隙

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值