项目中UI给了这么一个效果,如下:
按说这种效果使用Gallery是很容易的,但是呢Gallery一下子可以滑动好远,操作效果不是我们要的,项目经理要的就是Viewpager的操作感觉,但又要上面的这种UI效果。网上没有找到现成的,于是自己做。关键代码如下:
//关键类
public class CardTransformer implements ViewPager.PageTransformer {
final float SCALE_MAX = 0.95f;
final float ALPHA_MAX = 0.7f;
@Override
public void transformPage(View page, float position) {
float scale = (position < 0)
? ((1 - SCALE_MAX) * position + 1)
: ((SCALE_MAX - 1) * position + 1);
float alpha = (position < 0)
? ((1 - ALPHA_MAX) * position + 1)
: ((ALPHA_MAX - 1) * position + 1);
//为了滑动过程中,page间距不变,这里做了处理
if (position < 0) {
ViewCompat.setPivotX(page, page.getWidth());
ViewCompat.setPivotY(page, page.getHeight() / 2);
} else {
ViewCompat.setPivotX(page, 0);
ViewCompat.setPivotY(page, page.getHeight() / 2);
}
ViewCompat.setScaleX(page, scale);
ViewCompat.setScaleY(page, scale);
ViewCompat.setAlpha(page, Math.abs(alpha));
}
}
引用方式: adapter = new MyAdapter(); viewPager.setAdapter(adapter); viewPager.setOffscreenPageLimit(2);//预加载2个 DisplayMetrics dm = getResources().getDisplayMetrics(); viewPager.setPageMargin((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, dm)); viewPager.setClipChildren(false); viewPager.setPageTransformer(true, new CardTransformer()); viewPager.addOnPageChangeListener(this);