Skip to content

Instantly share code, notes, and snippets.

@r17171709
Last active October 10, 2015 07:13
Show Gist options
  • Save r17171709/44e66fe32ff7a1264d34 to your computer and use it in GitHub Desktop.
Save r17171709/44e66fe32ff7a1264d34 to your computer and use it in GitHub Desktop.
viewPager动画切换效果
ViewPager vp=null;
RelativeLayout rel_layout=null;
ArrayList<Fragment> fragments=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragments=new ArrayList<>();
MyFragment myFragment1=MyFragment.getInstance(R.mipmap.bg_1);
fragments.add(myFragment1);
MyFragment myFragment2=MyFragment.getInstance(R.mipmap.bg_2);
fragments.add(myFragment2);
MyFragment myFragment3=MyFragment.getInstance(R.mipmap.bg_3);
fragments.add(myFragment3);
MyFragment myFragment4=MyFragment.getInstance(R.mipmap.bg_4);
fragments.add(myFragment4);
MyFragment myFragment5=MyFragment.getInstance(R.mipmap.bg_5);
fragments.add(myFragment5);
vp= (ViewPager) findViewById(R.id.vp);
//一定要设置成数据源总个数
vp.setOffscreenPageLimit(fragments.size());
vp.setPageTransformer(true, new ScalePageTransformer());
MyAdapter adapter=new MyAdapter(getSupportFragmentManager());
vp.setAdapter(adapter);
rel_layout= (RelativeLayout) findViewById(R.id.rel_layout);
rel_layout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
for (int i=0;i<vp.getChildCount();i++) {
int[] location=new int[2];
View view=vp.getChildAt(i);
view.getLocationOnScreen(location);
int minX=location[0];
int maxX=minX+view.getWidth();
int minY=view.getTop();
int maxY=view.getBottom();
int x= (int) event.getX();
int y= (int) event.getY();
Rect rect=new Rect(minX, minY, maxX, maxY);
if (rect.contains(x, y)) {
vp.setCurrentItem(i);
}
}
return false;
}
});
}
public class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
}
private class ScalePageTransformer implements ViewPager.PageTransformer {
@Override
public void transformPage(View page, float position) {
float max=1.2f;
float min=0.6f;
if (position<0) {
page.setScaleX(max+(max-min)*position);
page.setScaleY(max+(max-min)*position);
}
else if (position>0) {
page.setScaleX(max-(max-min)*position);
page.setScaleY(max-(max-min)*position);
}
else {
page.setScaleX(max);
page.setScaleY(max);
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
page.getParent().requestLayout();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment