├── .gitignore ├── README.md ├── adviewpager ├── .gitignore ├── ad.gif ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── gson8 │ │ └── adviewpager │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── gson8 │ │ │ └── adviewpager │ │ │ ├── MainActivity.java │ │ │ └── vpanim │ │ │ ├── AlphaPageTransformer.java │ │ │ ├── RotateDownPageTransformer.java │ │ │ └── TabletTransformer.java │ └── res │ │ ├── drawable │ │ ├── img11.jpg │ │ ├── img12.jpg │ │ ├── img14.jpg │ │ ├── img3.jpg │ │ ├── img5.jpg │ │ ├── img6.jpg │ │ ├── img7.jpg │ │ ├── img8.jpg │ │ └── img9.jpg │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── gson8 │ └── adviewpager │ └── ExampleUnitTest.java ├── app ├── .gitignore ├── Screencast_1.gif ├── Screencast_2.gif ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── gson8 │ │ └── viewpageranim │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── gson8 │ │ │ └── viewpageranim │ │ │ ├── MainActivity.java │ │ │ └── vpanim │ │ │ ├── CubeTransformer.java │ │ │ ├── DefaultTransfomer.java │ │ │ ├── DepthNoTransformer.java │ │ │ ├── DepthPageTransformer.java │ │ │ ├── HorizontalFilpTransformer.java │ │ │ ├── PageLeftInTransformer.java │ │ │ ├── PageRightOutTransformer.java │ │ │ ├── RotateDownPageTransformer.java │ │ │ ├── RotateUpPageTransformer.java │ │ │ ├── ScaleIOransformer.java │ │ │ ├── SqueezeTransformer.java │ │ │ ├── TabletTransformer.java │ │ │ ├── VerticalFlipTransformer.java │ │ │ ├── ZoomInOutTransformer.java │ │ │ ├── ZoomOutPageTransformer.java │ │ │ └── ZoomOutTranformer.java │ └── res │ │ ├── drawable-hdpi │ │ └── ic_swap_horiz_black_48dp.png │ │ ├── drawable-mdpi │ │ └── ic_swap_horiz_black_48dp.png │ │ ├── drawable-xhdpi │ │ └── ic_swap_horiz_black_48dp.png │ │ ├── drawable-xxhdpi │ │ └── ic_swap_horiz_black_48dp.png │ │ ├── drawable-xxxhdpi │ │ └── ic_swap_horiz_black_48dp.png │ │ ├── drawable │ │ ├── img1.jpg │ │ ├── img16.jpg │ │ ├── img17.jpg │ │ ├── img2.jpg │ │ └── img4.jpg │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── gson8 │ └── viewpageranim │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties └── gradle └── wrapper ├── gradle-wrapper.jar └── gradle-wrapper.properties /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .idea/ 10 | githubtest/ 11 | transfroms/ 12 | settings.gradle 13 | import-summary.txt 14 | gradlew 15 | gradlew.bat 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ViewPager Transformer 2 | > - ps:`Transformer`接口是Android 3.0后推出的.如果要兼容3.0以下的.可以看一下 [JazzyViewPager](https://github.com/jfeinstein10/JazzyViewPager) 3 | > - 写这个的目录,一方面学习.二方面,不想自定义控件.可以把`com.gson8.viewpageranim.vpanim`包下的某个Transformer文件复制到项目就可以用了 4 | 5 | **所有的东西都是在`app Module下`** 6 | 7 | ``` 8 | mCusViewPager.setPageTransformer(true, new DefaultTransfomer()); 9 | ``` 10 | 11 | ## 1.app 12 | ![](app/Screencast_1.gif) 13 | ![](app/Screencast_2.gif) 14 | 15 | ## 主要参考资料 16 | - http://developer.android.com/training/animation/screen-slide.html 17 | - http://blog.csdn.net/lmj623565791/article/details/40411921/ 18 | - http://blog.csdn.net/lmj623565791/article/details/51339751 -------------------------------------------------------------------------------- /adviewpager/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /adviewpager/ad.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/ad.gif -------------------------------------------------------------------------------- /adviewpager/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.3" 6 | 7 | defaultConfig { 8 | applicationId "com.gson8.adviewpager" 9 | minSdkVersion 17 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:23.3.0' 26 | } 27 | -------------------------------------------------------------------------------- /adviewpager/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in F:\AndroidSDK/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /adviewpager/src/androidTest/java/com/gson8/adviewpager/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.gson8.adviewpager; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase 10 | { 11 | public ApplicationTest() 12 | { 13 | super(Application.class); 14 | } 15 | } -------------------------------------------------------------------------------- /adviewpager/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /adviewpager/src/main/java/com/gson8/adviewpager/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.gson8.adviewpager; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.view.PagerAdapter; 5 | import android.support.v4.view.ViewPager; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.ImageView; 10 | 11 | import com.gson8.adviewpager.vpanim.TabletTransformer; 12 | 13 | public class MainActivity extends AppCompatActivity 14 | { 15 | 16 | private ViewPager mViewPager; 17 | private PagerAdapter mAdapter; 18 | 19 | private int[] mImgIds = { R.drawable.img3, R.drawable.img5, R.drawable.img6, R.drawable.img7, R.drawable.img8, R.drawable.img9, R.drawable.img11, R.drawable.img12, R.drawable.img14 }; 20 | 21 | 22 | @Override 23 | protected void onCreate(Bundle savedInstanceState) 24 | { 25 | super.onCreate(savedInstanceState); 26 | setContentView(R.layout.activity_main); 27 | 28 | 29 | mViewPager = (ViewPager)findViewById(R.id.id_viewpager); 30 | mViewPager.setPageTransformer(true, new TabletTransformer()); 31 | //设置Page间间距,两个页面之相距多少 32 | mViewPager.setPageMargin(30); 33 | //设置缓存的页面数量 34 | mViewPager.setOffscreenPageLimit(3); 35 | 36 | mViewPager.setAdapter(mAdapter = new PagerAdapter() 37 | { 38 | @Override 39 | public Object instantiateItem(ViewGroup container, int position) 40 | { 41 | ImageView view = new ImageView(MainActivity.this); 42 | // view.setScaleType(ImageView.ScaleType.CENTER_CROP); 43 | view.setImageResource(mImgIds[position]); 44 | container.addView(view); 45 | return view; 46 | } 47 | 48 | @Override 49 | public void destroyItem(ViewGroup container, int position, Object object) 50 | { 51 | container.removeView((View)object); 52 | } 53 | 54 | @Override 55 | public int getCount() 56 | { 57 | return mImgIds.length; 58 | } 59 | 60 | @Override 61 | public boolean isViewFromObject(View view, Object o) 62 | { 63 | return view == o; 64 | } 65 | }); 66 | 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /adviewpager/src/main/java/com/gson8/adviewpager/vpanim/AlphaPageTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.adviewpager.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.adviewpager.vpanim.AlphaPageTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class AlphaPageTransformer implements ViewPager.PageTransformer 14 | { 15 | private static final float DEFAULT_MIN_ALPHA = 0.5f; 16 | private float mMinAlpha = DEFAULT_MIN_ALPHA; 17 | 18 | @Override 19 | public void transformPage(View page, float position) 20 | { 21 | 22 | if(position < -1) 23 | { 24 | //左边页面停下来执行 25 | page.setAlpha(mMinAlpha); 26 | } 27 | else if(position <= 1) 28 | { // [-1,1] 29 | 30 | if(position < 0) //[0,-1] 原来中间的页面到左边时执行 31 | { 32 | float factor = mMinAlpha + (1 - mMinAlpha) * (1 + position); 33 | page.setAlpha(factor); 34 | } 35 | else//[1,0] 原来右边的页面到中间 36 | { 37 | float factor = mMinAlpha + (1 - mMinAlpha) * (1 - position); 38 | page.setAlpha(factor); 39 | } 40 | } 41 | else 42 | { // (1,+Infinity] 右边页面停下时执行 43 | page.setAlpha(mMinAlpha); 44 | } 45 | 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /adviewpager/src/main/java/com/gson8/adviewpager/vpanim/RotateDownPageTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.adviewpager.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.adviewpager.vpanim.RotateDownPageTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class RotateDownPageTransformer implements ViewPager.PageTransformer 14 | { 15 | private static final float DEFAULT_MAX_ROTATE = 30.0f; 16 | private float mMaxRotate = DEFAULT_MAX_ROTATE; 17 | 18 | @Override 19 | public void transformPage(View page, float position) 20 | { 21 | if(position < -1) 22 | { 23 | page.setRotation(mMaxRotate * -1); 24 | page.setPivotX(page.getWidth()); 25 | page.setPivotY(page.getHeight()); 26 | } 27 | else if(position <= 1) 28 | { // [-1,1] 29 | 30 | if(position < 0)//[0,-1] 31 | { 32 | page.setPivotX(page.getWidth() * (0.5f + 0.5f * (-position))); 33 | page.setPivotY(page.getHeight()); 34 | page.setRotation(mMaxRotate * position); 35 | } 36 | else//[1,0] 37 | { 38 | page.setPivotX(page.getWidth() * 0.5f * (1 - position)); 39 | page.setPivotY(page.getHeight()); 40 | page.setRotation(mMaxRotate * position); 41 | } 42 | } 43 | else 44 | { // (1,+Infinity] 45 | // This page is way off-screen to the right. 46 | page.setRotation(mMaxRotate); 47 | page.setPivotX(page.getWidth() * 0); 48 | page.setPivotY(page.getHeight()); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /adviewpager/src/main/java/com/gson8/adviewpager/vpanim/TabletTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.adviewpager.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.adviewpager.vpanim.RotateDownPageTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class TabletTransformer implements ViewPager.PageTransformer 14 | { 15 | private static float mDegee = 30; 16 | private static float mAlpha = 0.5f; 17 | 18 | @Override 19 | public void transformPage(View page, float position) 20 | { 21 | if(position < -1) 22 | { 23 | page.setRotationY(mDegee); 24 | page.setAlpha(1); 25 | } 26 | else if(position <= 1) 27 | { 28 | if(position < 0) 29 | { 30 | page.setTranslationX((page.getWidth() * 0.5f) * position); 31 | page.setPivotX(page.getWidth() / 2.0f); 32 | page.setPivotY(page.getHeight() / 2.0f); 33 | page.setRotationY(mDegee * -position); 34 | page.setAlpha(mAlpha + (1 - mAlpha) * (1 + position)); 35 | 36 | } 37 | else 38 | { 39 | page.setTranslationX((page.getWidth() * 0.5f) * -position); 40 | page.setPivotX(page.getWidth() / 2.0f); 41 | page.setPivotY(page.getHeight() / 2.0f); 42 | page.setRotationY(mDegee * -position); 43 | page.setAlpha(mAlpha + (1 - mAlpha) * (1 - position)); 44 | } 45 | } 46 | else 47 | { 48 | page.setRotationY(-mDegee); 49 | page.setAlpha(1); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /adviewpager/src/main/res/drawable/img11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img11.jpg -------------------------------------------------------------------------------- /adviewpager/src/main/res/drawable/img12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img12.jpg -------------------------------------------------------------------------------- /adviewpager/src/main/res/drawable/img14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img14.jpg -------------------------------------------------------------------------------- /adviewpager/src/main/res/drawable/img3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img3.jpg -------------------------------------------------------------------------------- /adviewpager/src/main/res/drawable/img5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img5.jpg -------------------------------------------------------------------------------- /adviewpager/src/main/res/drawable/img6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img6.jpg -------------------------------------------------------------------------------- /adviewpager/src/main/res/drawable/img7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img7.jpg -------------------------------------------------------------------------------- /adviewpager/src/main/res/drawable/img8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img8.jpg -------------------------------------------------------------------------------- /adviewpager/src/main/res/drawable/img9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/drawable/img9.jpg -------------------------------------------------------------------------------- /adviewpager/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | 14 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /adviewpager/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /adviewpager/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /adviewpager/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /adviewpager/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /adviewpager/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/adviewpager/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /adviewpager/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /adviewpager/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /adviewpager/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /adviewpager/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | AdViewPager 3 | 4 | -------------------------------------------------------------------------------- /adviewpager/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /adviewpager/src/test/java/com/gson8/adviewpager/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.gson8.adviewpager; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * To work on unit tests, switch the Test Artifact in the Build Variants view. 9 | */ 10 | public class ExampleUnitTest 11 | { 12 | @Test 13 | public void addition_isCorrect() throws Exception 14 | { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/Screencast_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/Screencast_1.gif -------------------------------------------------------------------------------- /app/Screencast_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/Screencast_2.gif -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.3" 6 | 7 | defaultConfig { 8 | applicationId "com.gson8.viewpageranim" 9 | minSdkVersion 17 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:23.3.0' 26 | } 27 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in F:\AndroidSDK/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/gson8/viewpageranim/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase 10 | { 11 | public ApplicationTest() 12 | { 13 | super(Application.class); 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim; 2 | 3 | import android.content.DialogInterface; 4 | import android.os.Bundle; 5 | import android.support.v4.view.PagerAdapter; 6 | import android.support.v4.view.ViewPager; 7 | import android.support.v7.app.AlertDialog; 8 | import android.support.v7.app.AppCompatActivity; 9 | import android.support.v7.widget.Toolbar; 10 | import android.view.View; 11 | import android.view.ViewGroup; 12 | import android.widget.ArrayAdapter; 13 | import android.widget.ImageView; 14 | import android.widget.ListView; 15 | 16 | import com.gson8.viewpageranim.vpanim.DefaultTransfomer; 17 | 18 | import java.util.ArrayList; 19 | import java.util.List; 20 | 21 | public class MainActivity extends AppCompatActivity implements View.OnClickListener 22 | { 23 | 24 | private int[] mImgIds = { R.drawable.img1, R.drawable.img2, R.drawable.img4, R.drawable.img16, R.drawable.img17 }; 25 | 26 | ViewPager mCusViewPager; 27 | VpAdapter mAdatper; 28 | Toolbar mToolbar; 29 | List mTransList; 30 | 31 | @Override 32 | protected void onCreate(Bundle savedInstanceState) 33 | { 34 | super.onCreate(savedInstanceState); 35 | setContentView(R.layout.activity_main); 36 | mToolbar = (Toolbar)findViewById(R.id.toolbar); 37 | mToolbar.setNavigationOnClickListener(this); 38 | 39 | mCusViewPager = (ViewPager)findViewById(R.id.cus_viewpager); 40 | 41 | mCusViewPager.setPageTransformer(true, new DefaultTransfomer()); 42 | 43 | mTransList = new ArrayList<>(); 44 | 45 | mAdatper = new VpAdapter(); 46 | mCusViewPager.setAdapter(mAdatper); 47 | 48 | initData(); 49 | 50 | } 51 | 52 | private void initData() 53 | { 54 | mTransList.add("CubeTransformer"); 55 | mTransList.add("DefaultTransfomer"); 56 | mTransList.add("DepthNoTransformer"); 57 | mTransList.add("DepthPageTransformer"); 58 | mTransList.add("HorizontalFilpTransformer"); 59 | mTransList.add("PageLeftInTransformer"); 60 | mTransList.add("PageRightOutTransformer"); 61 | mTransList.add("RotateDownPageTransformer"); 62 | mTransList.add("RotateUpPageTransformer"); 63 | mTransList.add("ScaleIOransformer"); 64 | mTransList.add("SqueezeTransformer"); 65 | mTransList.add("TabletTransformer"); 66 | mTransList.add("VerticalFlipTransformer"); 67 | mTransList.add("ZoomInOutTransformer"); 68 | mTransList.add("ZoomOutPageTransformer"); 69 | mTransList.add("ZoomOutTranformer"); 70 | } 71 | 72 | 73 | @Override 74 | public void onClick(View v) 75 | { 76 | showDia(); 77 | } 78 | 79 | private void showDia() 80 | { 81 | AlertDialog.Builder builder = new AlertDialog.Builder(this); 82 | ListView lv = new ListView(this); 83 | builder.setTitle("ViewPager的滑动效果"); 84 | builder.setView(lv).setAdapter( 85 | new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mTransList), 86 | new DialogInterface.OnClickListener() 87 | { 88 | @Override 89 | public void onClick(DialogInterface dialog, int which) 90 | { 91 | setViewPagerTransformer(which); 92 | dialog.dismiss(); 93 | } 94 | }); 95 | builder.setPositiveButton("取消", new DialogInterface.OnClickListener() 96 | { 97 | @Override 98 | public void onClick(DialogInterface dialog, int which) 99 | { 100 | 101 | } 102 | }); 103 | builder.create().show(); 104 | } 105 | 106 | public void setViewPagerTransformer(int viewPagerTransformer) 107 | { 108 | try 109 | { 110 | mCusViewPager.setPageTransformer(true, (ViewPager.PageTransformer)Class.forName( 111 | "com.gson8.viewpageranim.vpanim." + mTransList.get(viewPagerTransformer)) 112 | .newInstance()); 113 | } 114 | catch(Exception e) 115 | { 116 | e.printStackTrace(); 117 | } 118 | } 119 | 120 | class VpAdapter extends PagerAdapter 121 | { 122 | @Override 123 | public int getCount() 124 | { 125 | return mImgIds.length; 126 | } 127 | 128 | @Override 129 | public boolean isViewFromObject(View view, Object object) 130 | { 131 | return view == object; 132 | } 133 | 134 | @Override 135 | public Object instantiateItem(ViewGroup container, int position) 136 | { 137 | ImageView iv = new ImageView(MainActivity.this); 138 | iv.setImageResource(mImgIds[position]); 139 | iv.setScaleType(ImageView.ScaleType.CENTER_CROP); 140 | container.addView(iv); 141 | return iv; 142 | 143 | } 144 | 145 | @Override 146 | public void destroyItem(ViewGroup container, int position, Object object) 147 | { 148 | container.removeView((View)object); 149 | } 150 | } 151 | 152 | } 153 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/CubeTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.CubeTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class CubeTransformer implements ViewPager.PageTransformer 14 | { 15 | @Override 16 | public void transformPage(View page, float position) 17 | { 18 | if(position < 0) 19 | { 20 | page.setPivotX(page.getWidth()); 21 | page.setPivotY(page.getHeight() * 0.5f); 22 | page.setRotationY(90f * position); 23 | } 24 | else 25 | { 26 | page.setPivotX(0); 27 | page.setPivotY(page.getHeight() * 0.5f); 28 | page.setRotationY(90f * position); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/DefaultTransfomer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.DefaultTransfomer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class DefaultTransfomer implements ViewPager.PageTransformer 14 | { 15 | @Override 16 | public void transformPage(View page, float position) 17 | { 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/DepthNoTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.DepthPageTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class DepthNoTransformer implements ViewPager.PageTransformer 14 | { 15 | private float mScale = 1f; 16 | 17 | @Override 18 | public void transformPage(View page, float position) 19 | { 20 | if(position <= 0) 21 | { 22 | page.setTranslationX(0); 23 | 24 | } 25 | else if(position <= 1) 26 | { 27 | page.setTranslationX(page.getWidth() * -position); 28 | } 29 | 30 | 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/DepthPageTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.DepthPageTransformer 7 | * Description: google 官方DEMO 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class DepthPageTransformer implements ViewPager.PageTransformer 14 | { 15 | private float mScale = 0.75f; 16 | private int mPageWidth = 0; 17 | 18 | 19 | public DepthPageTransformer(){} 20 | 21 | public DepthPageTransformer(float scale) 22 | { 23 | this.mScale = scale; 24 | } 25 | 26 | public void setScale(float mScale) 27 | { 28 | this.mScale = mScale; 29 | } 30 | 31 | public float getScale() 32 | { 33 | return mScale; 34 | } 35 | 36 | @Override 37 | public void transformPage(View page, float position) 38 | { 39 | mPageWidth = page.getWidth(); 40 | if(position < -1) 41 | { 42 | //// [-Infinity,-1) 43 | // This page is way off-screen to the left. 44 | // 本页面的方式关闭屏幕左侧 45 | page.setAlpha(0); 46 | } 47 | else if(position <= 0) 48 | { 49 | // [-1,0] 50 | // Use the default slide transition when moving to the left page 51 | // 向左移动页面时使用默认的幻灯片切换 52 | page.setAlpha(1); 53 | page.setTranslationX(0); 54 | page.setScaleX(1); 55 | page.setScaleY(1); 56 | } 57 | else if(position <= 1) 58 | { 59 | // (0,1] 60 | // Fade the page out. 61 | 62 | page.setAlpha(1 - position); 63 | page.setTranslationX(mPageWidth * -position); 64 | float scaleFactor = mScale + (1 - mScale) * (1 - Math.abs(position)); 65 | page.setScaleX(scaleFactor); 66 | page.setScaleY(scaleFactor); 67 | } 68 | else 69 | { 70 | //本页面的方式关闭屏幕向右 71 | // (1,+Infinity] 72 | // This page is way off-screen to the right. 73 | page.setAlpha(0); 74 | } 75 | 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/HorizontalFilpTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.HorizontalFilpTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class HorizontalFilpTransformer implements ViewPager.PageTransformer 14 | { 15 | @Override 16 | public void transformPage(View page, float position) 17 | { 18 | page.setTranslationX(page.getWidth() * -position); 19 | page.setTranslationY(0); 20 | final float rotation = 180f * position; 21 | 22 | page.setAlpha(rotation > 90f || rotation < -90f ? 0 : 1); 23 | page.setPivotX(page.getWidth() * 0.5f); 24 | page.setPivotY(page.getHeight() * 0.5f); 25 | page.setRotationY(rotation); 26 | 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/PageLeftInTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.PageRightOutTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.util.Log; 12 | import android.view.View; 13 | 14 | public class PageLeftInTransformer implements ViewPager.PageTransformer 15 | { 16 | private static final float SCALE = 0.5f; 17 | 18 | @Override 19 | public void transformPage(View page, float position) 20 | { 21 | 22 | float width = page.getWidth(); 23 | float height = page.getHeight(); 24 | 25 | if(position < -1) 26 | { 27 | setCommonScale(page, 1f); 28 | } 29 | else if(position <= 1) 30 | { 31 | if(position < 0) 32 | { 33 | Log.e("positionass", "transformPage: " + position); 34 | page.setPivotX(width * SCALE / 2.0f); 35 | page.setPivotY(height * SCALE); 36 | setCommonScale(page, position > -SCALE ? 1 + position : SCALE); 37 | } 38 | else 39 | { 40 | setCommonScale(page, 1); 41 | // page.setTranslationX(width * (1 + position) * SCALE * -1.0f); 42 | } 43 | } 44 | else 45 | { 46 | setCommonScale(page, 1f); 47 | } 48 | } 49 | 50 | public void setCommonScale(View page, float f) 51 | { 52 | page.setScaleX(f); 53 | page.setScaleY(f); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/PageRightOutTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.PageRightOutTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class PageRightOutTransformer implements ViewPager.PageTransformer 14 | { 15 | private static final float SCALE = 0.5f; 16 | 17 | @Override 18 | public void transformPage(View page, float position) 19 | { 20 | 21 | float width = page.getWidth(); 22 | float height = page.getHeight(); 23 | 24 | if(position < -1) 25 | { 26 | setCommonScale(page, 1f); 27 | } 28 | else if(position <= 1) 29 | { 30 | if(position < 0) 31 | { 32 | setCommonScale(page, 1); 33 | page.setTranslationX(width * position * SCALE); 34 | } 35 | else 36 | { 37 | page.setPivotX(width * SCALE / 2.0f); 38 | page.setPivotY(height * SCALE); 39 | setCommonScale(page, position < SCALE ? (1 - position) : SCALE); 40 | } 41 | } 42 | else 43 | { 44 | setCommonScale(page, 1f); 45 | } 46 | } 47 | 48 | public void setCommonScale(View page, float f) 49 | { 50 | page.setScaleX(f); 51 | page.setScaleY(f); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/RotateDownPageTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.adviewpager.vpanim.RotateDownPageTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class RotateDownPageTransformer implements ViewPager.PageTransformer 14 | { 15 | private static final float DEFAULT_MAX_ROTATE = 15.0f; 16 | private float mMaxRotate = DEFAULT_MAX_ROTATE; 17 | 18 | @Override 19 | public void transformPage(View page, float position) 20 | { 21 | if(position < -1) 22 | { 23 | page.setRotation(mMaxRotate * -1); 24 | page.setPivotX(page.getWidth()); 25 | page.setPivotY(page.getHeight()); 26 | } 27 | else if(position <= 1) 28 | { // [-1,1] 29 | 30 | if(position < 0)//[0,-1] 31 | { 32 | page.setPivotX(page.getWidth() * (0.5f + 0.5f * (-position))); 33 | page.setPivotY(page.getHeight()); 34 | page.setRotation(mMaxRotate * position); 35 | } 36 | else//[1,0] 37 | { 38 | page.setPivotX(page.getWidth() * 0.5f * (1 - position)); 39 | page.setPivotY(page.getHeight()); 40 | page.setRotation(mMaxRotate * position); 41 | } 42 | } 43 | else 44 | { // (1,+Infinity] 45 | // This page is way off-screen to the right. 46 | page.setRotation(mMaxRotate); 47 | page.setPivotX(page.getWidth() * 0); 48 | page.setPivotY(page.getHeight()); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/RotateUpPageTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.RotateUpPageTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class RotateUpPageTransformer implements ViewPager.PageTransformer 14 | { 15 | private static final float DEFAULT_MAX_ROTATE = -15.0f; 16 | private float mMaxRotate = DEFAULT_MAX_ROTATE; 17 | 18 | @Override 19 | public void transformPage(View page, float position) 20 | { 21 | if(position < -1) 22 | { 23 | page.setRotation(mMaxRotate * -1); 24 | page.setPivotX(page.getWidth()); 25 | page.setPivotY(0); 26 | } 27 | else if(position <= 1) 28 | { // [-1,1] 29 | 30 | if(position < 0)//[0,-1] 31 | { 32 | page.setPivotX(page.getWidth() * (0.5f + 0.5f * (-position))); 33 | page.setPivotY(0); 34 | page.setRotation(mMaxRotate * position); 35 | } 36 | else//[1,0] 37 | { 38 | page.setPivotX(page.getWidth() * 0.5f * (1 - position)); 39 | page.setPivotY(0); 40 | page.setRotation(mMaxRotate * position); 41 | } 42 | } 43 | else 44 | { // (1,+Infinity] 45 | // This page is way off-screen to the right. 46 | page.setRotation(mMaxRotate); 47 | page.setPivotX(page.getWidth() * 0); 48 | page.setPivotY(0); 49 | } 50 | 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/ScaleIOransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.ScaleIOransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class ScaleIOransformer implements ViewPager.PageTransformer 14 | { 15 | @Override 16 | public void transformPage(View page, float position) 17 | { 18 | page.setTranslationX(page.getWidth() * -position); 19 | page.setTranslationY(0); 20 | page.setPivotX(position < 0 ? 0 : page.getWidth()); 21 | page.setPivotY(page.getHeight() / 2f); 22 | float scale = position < 0 ? 1f + position : 1f - position; 23 | page.setScaleX(scale); 24 | page.setScaleY(scale); 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/SqueezeTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.SqueezeTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class SqueezeTransformer implements ViewPager.PageTransformer 14 | { 15 | @Override 16 | public void transformPage(View page, float position) 17 | { 18 | if(position < -1) 19 | { 20 | page.setPivotX(0); 21 | page.setScaleX(0); 22 | } 23 | else if(position <= 1) 24 | { 25 | if(position < 0) 26 | { 27 | page.setPivotX(page.getWidth()); 28 | page.setScaleX(1f + position); 29 | } 30 | else 31 | { 32 | page.setPivotX(0); 33 | page.setScaleX(1f - position); 34 | } 35 | } 36 | else 37 | { 38 | page.setPivotX(page.getWidth()); 39 | page.setScaleX(1); 40 | } 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/TabletTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.adviewpager.vpanim.RotateDownPageTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class TabletTransformer implements ViewPager.PageTransformer 14 | { 15 | private static float mDegee = 30; 16 | private static float mAlpha = 0.5f; 17 | 18 | @Override 19 | public void transformPage(View page, float position) 20 | { 21 | if(position < -1) 22 | { 23 | page.setRotationY(mDegee); 24 | page.setAlpha(1); 25 | } 26 | else if(position <= 1) 27 | { 28 | if(position < 0) 29 | { 30 | page.setTranslationX((page.getWidth() * 0.5f) * position); 31 | page.setPivotX(page.getWidth() / 2.0f); 32 | page.setPivotY(page.getHeight() / 2.0f); 33 | page.setRotationY(mDegee * -position); 34 | page.setAlpha(mAlpha + (1 - mAlpha) * (1 + position)); 35 | 36 | } 37 | else 38 | { 39 | page.setTranslationX((page.getWidth() * 0.5f) * -position); 40 | page.setPivotX(page.getWidth() / 2.0f); 41 | page.setPivotY(page.getHeight() / 2.0f); 42 | page.setRotationY(mDegee * -position); 43 | page.setAlpha(mAlpha + (1 - mAlpha) * (1 - position)); 44 | } 45 | } 46 | else 47 | { 48 | page.setRotationY(-mDegee); 49 | page.setAlpha(1); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/VerticalFlipTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.VerticalFlipTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.util.Log; 12 | import android.view.View; 13 | 14 | public class VerticalFlipTransformer implements ViewPager.PageTransformer 15 | { 16 | @Override 17 | public void transformPage(View page, float position) 18 | { 19 | page.setTranslationX(page.getWidth() * -position); 20 | page.setTranslationY(0); 21 | 22 | final float rotation = -180f * position; 23 | 24 | page.setAlpha(rotation > 90f || rotation < -90f ? 0f : 1f); 25 | page.setPivotX(page.getWidth() * 0.5f); 26 | page.setPivotY(page.getHeight() * 0.5f); 27 | 28 | Log.e("tass", "transformPage: " + page.getWidth() + " " + page.getHeight() + rotation); 29 | 30 | page.setRotationX(rotation); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/ZoomInOutTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.ZoomInOutTransformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class ZoomInOutTransformer implements ViewPager.PageTransformer 14 | { 15 | @Override 16 | public void transformPage(View page, float position) 17 | { 18 | page.setTranslationX(page.getWidth() * -position); 19 | page.setTranslationY(0); 20 | 21 | float scale = position < 0 ? position + 1f : Math.abs(1f - position); 22 | page.setScaleX(scale); 23 | page.setScaleY(scale); 24 | page.setPivotX(page.getWidth() * 0.5f); 25 | page.setPivotY(page.getHeight() * 0.5f); 26 | 27 | if(position < -1f || position > 1f) 28 | page.setAlpha(0f); 29 | else 30 | page.setAlpha(1f - (scale - 1f)); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/ZoomOutPageTransformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | import android.support.v4.view.ViewPager; 4 | import android.view.View; 5 | 6 | 7 | /* 8 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 9 | * E-Mail: Zyj7810@126.com 10 | * Package: com.gson8.viewpageranim.vpanim.ZoomInOutTransformer 11 | * Description: google官方DEMO 12 | */ 13 | public class ZoomOutPageTransformer implements ViewPager.PageTransformer 14 | { 15 | private float mScale = 0.85f; 16 | private float mAlaha = 0.5f; 17 | 18 | public ZoomOutPageTransformer(){} 19 | 20 | public ZoomOutPageTransformer(float scale, float alpha) 21 | { 22 | this.mScale = scale; 23 | this.mAlaha = alpha; 24 | } 25 | 26 | public float getScale() 27 | { 28 | return mScale; 29 | } 30 | 31 | public void setScale(float mScale) 32 | { 33 | this.mScale = mScale; 34 | } 35 | 36 | public float getAlaha() 37 | { 38 | return mAlaha; 39 | } 40 | 41 | public void setAlaha(float mAlaha) 42 | { 43 | this.mAlaha = mAlaha; 44 | } 45 | 46 | public void transformPage(View view, float position) 47 | { 48 | int pageWidth = view.getWidth(); 49 | int pageHeight = view.getHeight(); 50 | 51 | if(position < -1) 52 | { // [-Infinity,-1) 53 | // This page is way off-screen to the left. 54 | view.setAlpha(0); 55 | } 56 | else if(position <= 1) 57 | { // [-1,1] 58 | // Modify the default slide transition to shrink the page as well 59 | float scaleFactor = Math.max(mScale, 1 - Math.abs(position)); 60 | float vertMargin = pageHeight * (1 - scaleFactor) / 2; 61 | float horzMargin = pageWidth * (1 - scaleFactor) / 2; 62 | if(position < 0) 63 | { 64 | view.setTranslationX(horzMargin - vertMargin / 2); 65 | } 66 | else 67 | { 68 | view.setTranslationX(-horzMargin + vertMargin / 2); 69 | } 70 | 71 | // Scale the page down (between mScale and 1) 72 | view.setScaleX(scaleFactor); 73 | view.setScaleY(scaleFactor); 74 | 75 | // Fade the page relative to its size. 76 | view.setAlpha(mAlaha + (scaleFactor - mScale) / (1 - mScale) * (1 - mAlaha)); 77 | 78 | } 79 | else 80 | { // (1,+Infinity] 81 | // This page is way off-screen to the right. 82 | view.setAlpha(0); 83 | } 84 | } 85 | } -------------------------------------------------------------------------------- /app/src/main/java/com/gson8/viewpageranim/vpanim/ZoomOutTranformer.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim.vpanim; 2 | 3 | /* 4 | * ViewPagerAnim making by Syusuke/琴声悠扬 on 2016/5/9 5 | * E-Mail: Zyj7810@126.com 6 | * Package: com.gson8.viewpageranim.vpanim.ZoomOutTranformer 7 | * Description: null 8 | */ 9 | 10 | import android.support.v4.view.ViewPager; 11 | import android.view.View; 12 | 13 | public class ZoomOutTranformer implements ViewPager.PageTransformer 14 | { 15 | @Override 16 | public void transformPage(View page, float position) 17 | { 18 | page.setTranslationX(page.getWidth() * -position); 19 | page.setTranslationY(0); 20 | 21 | float scale = 1f + Math.abs(position); 22 | page.setScaleX(scale); 23 | page.setScaleY(scale); 24 | page.setPivotX(page.getWidth() * 0.5f); 25 | page.setPivotY(page.getHeight() * 0.5f); 26 | 27 | if(position < -1.0f || position > 1.0f) 28 | page.setAlpha(0f); 29 | else 30 | page.setAlpha(1.0f - (scale - 1.0f)); 31 | 32 | if(position == -1) 33 | { 34 | page.setTranslationX(page.getWidth() * -1); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_swap_horiz_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable-hdpi/ic_swap_horiz_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_swap_horiz_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable-mdpi/ic_swap_horiz_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_swap_horiz_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable-xhdpi/ic_swap_horiz_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_swap_horiz_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable-xxhdpi/ic_swap_horiz_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_swap_horiz_black_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable-xxxhdpi/ic_swap_horiz_black_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/img1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable/img1.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/img16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable/img16.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/img17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable/img17.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/img2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable/img2.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/img4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/drawable/img4.jpg -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | #000 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ViewPagerAnim 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/test/java/com/gson8/viewpageranim/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.gson8.viewpageranim; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * To work on unit tests, switch the Test Artifact in the Build Variants view. 9 | */ 10 | public class ExampleUnitTest 11 | { 12 | @Test 13 | public void addition_isCorrect() throws Exception 14 | { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:2.1.0' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | jcenter() 18 | } 19 | } 20 | 21 | task clean(type: Delete) { 22 | delete rootProject.buildDir 23 | } 24 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/syusuke/ViewPagerAnim/683bfb1c357768b0330607d5f96c4cb90140c36d/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 28 10:00:20 PST 2015 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip 7 | --------------------------------------------------------------------------------