First on effect one:
First on effect two:
First on the effect three:
First, the Viewpager control is defined, and the second is to invoke a line of code to animate the effect.
Pager. Setpagetransformer (true,Depthpagetransformer ());
The prerequisite is to do some preparation operations, and only api3.0 above can be effective.
Note: Because the property animation is 3.0 later, if you want to implement animation on a phone below 3.0, you need to make some changes, using the nineoldandroids frame instead of the property animation. It's not backwards compatible here first. If you want to backward-compatible friends, you can visit the macro-yang great God's blog, address http://blog.csdn.net/lmj623565791/article/details/40411921/
Public classMainactivityextendsappcompatactivity {PrivateViewpagerPager;private int[]Mimgids=New int[]{r.drawable.Ic_guaid1, R.drawable.Ic_guaid2, R.drawable.IC_GUAID3, R.drawable.Ic_guaid4};PrivateList<imageview>mimages=NewArraylist<> ();@Override protected voidOnCreate (Bundle savedinstancestate) {requestwindowfeature (Window.Feature_no_title);Super. OnCreate (Savedinstancestate); Setcontentview (r.layout.Activity_main);Pager= ((Viewpager) Findviewbyid (r.id.Pager));//Add Toggle animation effect (api3.0 or more) for Viewpager
//Effect three // Pager.setpagetransformer (true,new zoomoutpagetransformer ());
Effect Two
/span> // Pager . Setpagetransformer ( true , new Rotatedownpagetransformer ());
< em>//effect one
Pager . Setpagetransformer ( true , new Depthpagetransformer ());
Pager. Setoffscreenpagelimit (3);Pager. Setadapter (NewPageradapter () {@Override public intGetCount () {returnMimgids.length; }@Override Public BooleanIsviewfromobject (View view, Object object) {returnView==object; }@Override PublicObject Instantiateitem (ViewGroup container,intPosition) {ImageView imageview=NewImageView (mainactivity. This); Imageview.setimageresource (Mimgids[position]); Container.addview (ImageView);returnImageView; }@Override Public voidDestroyitem (ViewGroup container,intPosition, Object object) {Container.removeview ((ImageView) object); } }); }}
Public classDepthpagetransformerImplementsViewpager.pagetransformer {private static final floatMin_scale=0.75f;Public voidTransformpage (View view,floatPosition) {intPageWidth = View.getwidth ();if(Position <-1) {//[-infinity,-1]//This page was the off-screen to the left. View.setalpha (0); }else if(Position <=0) {//[ -1,0]//Use of the default slide transition when moving to the left page View.setalpha (1); View.settranslationx (0); View.setscalex (1); View.setscaley (1); }else if(Position <=1) {//(0,1]//Fade the page out. View.setalpha (1-position);//CounterAct the default slide transition View.settranslationx (PageWidth *-position);//Scale the PAGE down (between Min_scale and 1) floatScalefactor =Min_scale + (1-Min_scale) * (1-Math.ABS(position)); View.setscalex (Scalefactor); View.setscaley (Scalefactor); }Else{//(1,+infinity]//This page is a-off-screen to the right. View.setalpha (0); } }}
Public classZoomoutpagetransformerImplementsViewpager.pagetransformer {private static final floatMin_scale=0.85f;private static final floatMin_alpha=0.5f;Public voidTransformpage (View view,floatPosition) {intPageWidth = View.getwidth ();intPageHeight = View.getheight ();if(Position <-1) {//[-infinity,-1]//This page was the off-screen to the left. View.setalpha (0); }else if(Position <=1) {//[ -1,1]//Modify The default slide transition to shrink the page as well floatScalefactor = Math.Max(Min_scale,1-Math.ABS(position));floatVertmargin = PageHeight * (1-Scalefactor)/2;floatHorzmargin = PageWidth * (1-Scalefactor)/2;if(Position <0) {View.settranslationx (Horzmargin-vertmargin/2); }Else{View.settranslationx (-horzmargin + vertmargin/2); }//Scale the PAGE down (between Min_scale and 1) View.setscalex (Scalefactor); View.setscaley (Scalefactor);//Fade the page relative to its size. View.setalpha (Min_alpha+ (Scalefactor-Min_scale) / (1-Min_scale) * (1-Min_alpha)); }Else{//(1,+infinity]//This page is a-off-screen to the right. View.setalpha (0); } }}
Public classRotatedownpagetransformerImplementsviewpager.pagetransformer{private static final floatRot_max=20.0f;Private FloatMrot;Public voidTransformpage (View view,floatPosition) {Log.e("TAG", view +" , " + Position +"");if(Position <-1) {//[-infinity,-1]//This page was the off-screen to the left . View.setrotation (0); }else if(Position <=1)//A page slide to page B, page a from 0.0 ~ 1; page b from 1 ~ 0.0 {//[ -1,1]//Modify The default slide transition to shrink the page as well if(Position <0) {Mrot= (Rot_max* position); View.setpivotx (View.getmeasuredwidth () *0.5f); View.setpivoty (View.getmeasuredheight ()); View.setrotation (Mrot); }Else {Mrot= (Rot_max* position); View.setpivotx (View.getmeasuredwidth () *0.5f); View.setpivoty (View.getmeasuredheight ()); View.setrotation (Mrot); }//Scale the PAGE down (between Min_scale and 1) //Fade the page relative to its size. }Else {//(1,+infinity]//This page is a-off-screen to the right. View.setrotation (0); } } }
Viewpager animation effect (learning from mu-net)