http://www.apkbus.com/android-251300-1-1.html
[Java]
纯文本查看 复制代码
1
2
3
4
5
6
|
viewpager.setPageTransformer(
false
,
new
ViewPager.PageTransformer() {
@Override
public
void
transformPage(View page,
float
position) {
// do transformation here
}
});
|
transformPage(View page, float position)方法有两个参数,page参数代表当前view 或 fragment,position参数就是它的位置的值。滑动的时候,起始page和目标page的各自的transformPage()就会被同时触发调用。一个page的position为0代表它处于中间,为1代表它完全处于右边,为-1代表它完全处于左边。
官方文档是这样说的,position是一个page相对于屏幕中心的位置。position的值跟随用户滑动page而变化。当page填充屏幕完全可见的时候,它的position是0;page位于屏幕右边,它的position是1。两个page同时滑动到一半的时候,左边page的position是-0.5,右边page的position是0.5。(因为左右是对称的)所以,为了不考虑正负值,我们取position的绝对值:
final
float normalizedposition = Math.
abs(Math.
abs(position) -
1);
现在左右两个page各自有了一个0到1之间的normalizedposition值(左边在递减[1,0],右边在递增[0,1]),怎么用就靠你了。比如,首先,我们可以做一个淡入淡出效果
[Java]
纯文本查看 复制代码
1
2
3
4
5
|
@Override
public
void
transformPage(View page,
float
position) {
final
float
normalizedposition = Math.abs(Math.abs(position) -
1
);
page.setAlpha(normalizedposition);
}
|
尺寸大小变化效果:
[Java]
纯文本查看 复制代码
1
2
3
4
5
6
|
@Override
public
void
transformPage(View page,
float
position) {
final
float
normalizedposition = Math.abs(Math.abs(position) -
1
);
page.setScaleX(normalizedposition /
2
+
0
.5f);
page.setScaleY(normalizedposition /
2
+
0
.5f);
}
|
最后一个例子是使page沿Z轴方向旋转30度:
[Java]
纯文本查看 复制代码
1
2
3
4
|
@Override
public
void
transformPage(View page,
float
position) {
page.setRotationY(position * -
30
);
}
|