Last active
October 10, 2015 07:13
-
-
Save r17171709/44e66fe32ff7a1264d34 to your computer and use it in GitHub Desktop.
viewPager动画切换效果
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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