就是当滑动时,指定一个你想让他不随整体滑动或步调一致的滑动控件,那么就可以通过viewPager.setPageTransformer(false, pt)的这个方法来设置,其中pt是继承ViewPager.PageTransformer的类对象,核心代码如下:MainActivity
这段代码我打了日志,分析了下:viewpager分为左中右三块(-1 0 1);初始的时候,左边没有pager,当向左滑的时候,此时的pager的position取值范围【-1,0】,右边来的pager的position取值范围【0,1】,那么此时想让里面的imageview移动的慢点,就要设置parallaxView.setTranslationX(-(position * width * speed));
ParallaxPagerTransformer pt = new ParallaxPagerTransformer((R.id.image));
//pt.setBorder(20);
//pt.setSpeed(0.2f);
mPager.setPageTransformer(false, pt);
ParallaxPagerTransformer
public class ParallaxPagerTransformer implements ViewPager.PageTransformer {
private int id;
private int border = 0;
private float speed = 0.2f;
public ParallaxPagerTransformer(int id) {
this.id = id;
}
@Override
public void transformPage(View view, float position) {
View parallaxView = view.findViewById(id);
Log.i("ParallaxPagerTransformer", "transformPage "+position);
if (parallaxView != null) {
if (position > -1 && position < 1) {
Log.i("ParallaxPagerTransformer", "position "+position);
float width = parallaxView.getWidth();
parallaxView.setTranslationX(-(position * width * speed));
float sc = ((float)view.getWidth() - border)/ view.getWidth();
if (position == 0) {
view.setScaleX(1);
view.setScaleY(1);
} else {
view.setScaleX(sc);
view.setScaleY(sc);
}
}
}
}
public void setBorder(int px) {
border = px;
}
public void setSpeed(float speed) {
this.speed = speed;
}
}
这段代码我打了日志,分析了下:viewpager分为左中右三块(-1 0 1);初始的时候,左边没有pager,当向左滑的时候,此时的pager的position取值范围【-1,0】,右边来的pager的position取值范围【0,1】,那么此时想让里面的imageview移动的慢点,就要设置parallaxView.setTranslationX(-(position * width * speed));
git:https://github.com/linghp/my_parallax